Excel VBA 質問スレ Part35
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2014/10/25(土) 06:31:51.05ID:gTYzNJ95___
___ /____ヽ ____
/____\ | |´・ω・`| | /___ヽ
.l |´・ω・`| ニX二 . ̄ ̄ ̄ 二X二 |´・ω・`| l 俺たちに任せろ
!、 ̄ ̄ ̄ ヽ | | /  ̄ ̄ ̄/
ヽ_/ヽ、 ヽ__) \__/\_/. /_/ ノヽ_/
 ̄  ̄ ̄
このスレはコード書き込みOKです。
作成依頼もOKですが、作成依頼限定ではありません。
コードが嫌な人は別スレ建ててください。
※前スレ
Excel VBA 質問スレ Part34
http://peace.2ch.net/test/read.cgi/tech/1403911485/
0002デフォルトの名無しさん
2014/11/01(土) 13:31:18.92ID:SV8kvD460003デフォルトの名無しさん
2014/11/01(土) 23:04:08.43ID:Sz14oDuq★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。
★2 ExcelのVBA以外の部分に関する質問はNGです。
但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。
★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
VBAとは、『Visual Basic for Applications』の略で
Application
├Workbooks
|└Workbook
| ├Worksheets
| |└Worksheet
というApplication以下のオブジェクトを、VB言語で操作するものを指します。
例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
0004デフォルトの名無しさん
2014/11/01(土) 23:37:24.36ID:W9yPumEs0005デフォルトの名無しさん
2014/11/03(月) 19:42:52.80ID:WGAbt5+bエクセルで、たとえばA列の選択したある範囲をD列等にコピーして、元のA列には
ある乗数をかけて置き換えるには、どのようなマクロにすればよいのでしょうか。
乗数はメッセージボックスで指定できるようにしたいです。
利用環境は、Win7、Excel2007 です。
0006デフォルトの名無しさん
2014/11/03(月) 19:59:33.35ID:lQ2a0K8Qコピー先範囲.Value = コピー元範囲.Value
乗算置換は
For Each セル In 乗算範囲.Cells
セル.Value = セル.Value * 乗数
Next
乗数入力は、MsgBoxだと選択肢が限られるので
InputBoxで入力するか、UserFormで選択させる
0007デフォルトの名無しさん
2014/11/03(月) 20:13:31.34ID:WGAbt5+b頑張ってコードに挑戦してみます。
0008デフォルトの名無しさん
2014/11/04(火) 00:16:45.36ID:Q2DIz3wGデータ使用範囲全体をコピーするということをさせたいのですが
矢印の部分が違うそうなのですがどうしたらいいでしょうか
Sub Macro1()
'
Dim oRange As Range
Dim lColumnL As Long
Dim lColumnR As Long
Dim lRowT As Long
Dim lRowB As Long
'UsedRangeでデータの範囲を自動的に求めます
Set oRange = ActiveSheet.UsedRange
'範囲から、上下の行番号と左右の列番号を求めます
':上下
lRowT = oRange.Row
lRowB = oRange.Row + oRange.Rows.Count - 1
':左右
lColumnL = oRange.Column
lColumnR = oRange.Column + oRange.Columns.Count - 1
Range(Cells(lColumnL, lRowT), Cells(lColumnR, lRowB)).Select ←
Selection.Copy
End Sub
0009デフォルトの名無しさん
2014/11/04(火) 00:31:39.40ID:LHe+/5EUじゃだめなん
0010デフォルトの名無しさん
2014/11/04(火) 00:45:16.25ID:CQMAx+ejCellsの 行と列 指定が逆
Cells(行, 列)としないといけない
× Range(Cells(lColumnL, lRowT), Cells(lColumnR, lRowB)).Select
○ Range(Cells(lRowT, lColumnL), Cells(lRowB, lColumnR)).Select
0011デフォルトの名無しさん
2014/11/04(火) 00:50:48.62ID:Q2DIz3wG>>9
いいのはいいんですけど、
後々これに引き続くものでデータ範囲を変数として使うつもりなので後学のためにもと
>>10
ついA2等の関数表記の影響を受けてました。単純なことでしたね
0012デフォルトの名無しさん
2014/11/05(水) 19:11:14.87ID:M8b30UGW0013デフォルトの名無しさん
2014/11/06(木) 09:08:20.19ID:0LeyiXieたぶんLongの意味で使ってる
0014デフォルトの名無しさん
2014/11/06(木) 11:16:31.34ID:XF7GoSalその先入観で見ると、エルの小文字ではなく、アイの大文字と勘違しやすいのかも
0015デフォルトの名無しさん
2014/11/06(木) 13:14:10.98ID:Y7ovwliu>普通はLong型(Long Integer型)に型プレフィックス付ける場合はi(アイ)だからね
そんなの初めて聞いた。
おれはintとlngでやってる。
0016デフォルトの名無しさん
2014/11/06(木) 13:35:28.15ID:eJWEZn4W0017デフォルトの名無しさん
2014/11/06(木) 13:44:05.22ID:0LeyiXieそれはない
0018デフォルトの名無しさん
2014/11/06(木) 14:05:08.09ID:eJWEZn4WVBA以外のshort型がある言語で、たいていの人はshort型をめったに使わないと思うが、
俺もそれと同じ理由で整数型が必要な場合は、たいていの場合Longしか使わない。
0019デフォルトの名無しさん
2014/11/06(木) 15:20:14.80ID:36Mfs1Eo0020デフォルトの名無しさん
2014/11/06(木) 15:38:30.64ID:eJWEZn4W> 例えば For 〜 Next のカウンタでもLongにするってこと?
うん。
For Nextは、リテラル値 to リテラル値ってやることはほとんどなく、Len(string)までとか、
Ubound(array)までとか、Range.Countまでとかの場合が多いでしょ。
Len()もUbound()もRange.Countも戻り値はLongだから、ループカウンタもLongにしといたほうが気持ちいい。
そもそもCells(i, j)のi, jだってIntegerじゃ収まらないしね。
0021デフォルトの名無しさん
2014/11/06(木) 16:34:25.57ID:VIOokZaI俺もFor文のカウンタ変数はロングで統一してるな
0022■長くなるので興味が無い人は読み飛ばしてくれ
2014/11/06(木) 16:54:20.74ID:XF7GoSalその二つを変数名で区別する必要性が実は無いんだよ
Integer型とLong型の特性を見ると
・Integer型:-32768 〜 32767、メモリ消費2Byte、処理が遅い(処理単位の関係で変換が必要なため)
・Long型:-2147483648 〜 2147483647、メモリ消費2Byte、処理が速い
となるので、Integer型にはメモリ消費が少ないってメリットしか無く、しかもそのメモリ消費も、
i(1000000)とかの超多要素配列でやっと約2MBの差なので、昨今のPCでは、メモリ消費量を気にしなければ
ならない程の要素数の配列を使うのはレアケースであり、それを踏まえるとInteger型の出番は
・自分で弄れないライブラリとかの関数で、引数がInteger型の参照渡しでそれに合わせる必要がある場合
・超多要素配列
の2つだけとなり、それ以外はIntegerで足りる範囲でもLong型を使うのが正解となるが
前者は相手関数合わせが必須で選択の余地がないから、変数名でIntかLongかを把握できるようにしておくとか関係なく
後者の「超多要素配列」ってのも、変数名で区別できるようにするまでもなく明らかに把握できるものなので
そうなると整数型の16bitと32bitの区別を変数名で出来るようにしておいても煩雑になるだけで"百害有って一利無し"
今後、他の言語を使うことも考えたら、「int〜=16bit、lng〜=32bit」って区別できるようにしているなら、VB.NETでは
Dim intA As Short ' .NETでは16bit符号付整数はInteger型ではなくShort型
Dim lngA As Integer ' .NETでは32bit符号付整数はLong型ではなくInteger型
ってするのか?
それとも「int〜=VBA・VB6では16bit、VB.NETでは32bit、lng〜=VBA・VB6では32bit、VB.NETでは64bit」
なんて、ややこしいルールで区別するの?
VBAの中だけなら、「煩雑になるだけで"百害有って一利無し"」と言っても、利が無いから避けた方が良いだけで
害がそんなに大きい訳じゃないが、今後他の言語を使うようになると、その煩雑さは大きくなる
そもそも、VB.NETがIntegerやLongのサイズを、VBAやVB6に合わせなかったのも、これを変数名で区別する必要がないと
一般的に認識されているからなので、整数型は長か短かまで区別せずに、整数を意味するintかiで統一した方が良い
0023デフォルトの名無しさん
2014/11/06(木) 17:27:14.13ID:CHag8G5G型の使い分けと、変数名で型名を識別する必要性が区別できてないようですが
型のプレフィクス使いながらその型じゃない変数とか使うプログラムとか絶対メンテしたくないな
intA = lngBならオーバーフローする可能性があるなと思うわけですが
変数名が型を表さないのに型のプレフィクスつけると
intA = intBがオーバーフローしたりするわけですが
>今後、他の言語を使うことも考えたら、「int〜=16bit、lng〜=32bit」って
他の言語ならその言語によって型が定義されてるわけで、その言語の型に従うのが当然のわけですが
>「int〜=VBA・VB6では16bit、VB.NETでは32bit、lng〜=VBA・VB6では32bit、VB.NETでは64bit」
>なんて、ややこしいルールで区別するの?
それは自分ルールでもなんでもなくて言語仕様ですから
ややこしくても変数名にかかわらず、普通はちゃんと区別します
0024デフォルトの名無しさん
2014/11/06(木) 17:30:49.71ID:eJWEZn4W0025デフォルトの名無しさん
2014/11/06(木) 17:39:21.93ID:CHag8G5GVBAやVB6の頃までは推奨されてたからなぁ
0026デフォルトの名無しさん
2014/11/06(木) 17:50:03.96ID:eJWEZn4Wむかしむかしのお話ですね。
今システムハンガリアンについて話すことがあるとすれば、「それは使うな」しかない。
0027デフォルトの名無しさん
2014/11/06(木) 17:56:11.68ID:CHag8G5G「今の言語」(たとえばVB.Net)と開発環境ならな
VBAとかVB6とか、むかしむかしの言語で生き残ってるやつの話は微妙
0028デフォルトの名無しさん
2014/11/06(木) 17:59:21.44ID:eJWEZn4Wいや、全然微妙じゃないし
0029デフォルトの名無しさん
2014/11/06(木) 18:13:59.10ID:XF7GoSal型の使い分けと、変数名で型名を識別する必要性は同一ではないが関連性があり
VBAでは、正しい型の使い分けが出来ていると、少なくとも整数型において
変数名で型名を識別する必要性が無くなるってことなんだけど、ちょっと難しいかな?
正しい型の使い分けが出来ていると、単一の変数における
整数型 = 整数型
において
Integer型 = Long型
が発生するのは、その代入されるInteger型変数が、
Integer型で渡す必要がある外部関数の引数の場合のみなわけだが、
もしこれでオーバーフローするなら、そもそもInteger型でしか引数を受けられない
その外部関数には渡せないので、Integer型とLong型を区別できるようにしておいて、
Long型からの代入だからInteger型ではなくLong型を使おうとしても、
結局Long型は使えないってことになり、識別出来るようにしていても効果を生まない
仮定での話なら、識別できないとこういう不都合があるって仮説を挙げられるが
実プログラムに置いては、その仮説の前提自体に問題があって、その仮説が成り立つ状況は
識別云々以前の部分に問題が無い限り発生しないのだよ
因みに俺は元システムハンガリアン派、現アプリケーションハンガリアン派です
ハンガリアン以外にも色々あることは知っているが、ハンガリアンからは離れられない...orz
0030デフォルトの名無しさん
2014/11/06(木) 19:23:52.46ID:CHag8G5Gまあ、変数名で型を識別する必要があるのは、型を使い分けてるからであって
それを問題があるだのというなら話にならんわな
お前の主張は
型を使い分ける必要がないから変数名で区別できる必要が無い
以上のものが無いんだから
0031デフォルトの名無しさん
2014/11/06(木) 20:05:02.68ID:XF7GoSal利点のない使い方における必要性とかは、検討するだけ無駄で
利点のある使い方においての効果を第一に考えた方が良いと思ってる
なので、利点のない使い方でも、それを実行することが不可能では無い以上
利点のない使い方における効果も重要だというなら、話にならんというか
話は合わんわな
変数名で型を区別できる必要は、型を使い分ける必要があってこそ必要になってくるもので
型を使い分ける必要が無いのに、変数名で型を区別できるようにしたところで
弊害しか生まないという「実際の実用上の現実」に沿って判断するのが俺の主義なので
0032デフォルトの名無しさん
2014/11/06(木) 21:11:13.91ID:wcz8x94+型を区別できる接頭語をつけたくなるだろ。
0033デフォルトの名無しさん
2014/11/06(木) 21:40:51.78ID:QIGtHRrB俺も以前は色々言ってたけど、いいんじゃない?別に。
仕事でやっているならその仕事場で決められているだろうからそれに従えばいいだろうし、
解り易い名前を〜と言ったときにVBAのようなインテリセンスが陳腐な言語であればプリフィクスが付くのも道理だよね。
て言うか.Netが出てから何年経ったらVBAを.Netにしてくてるんだよ。
資源保持ってったって限度が有るだろうよ。
今VB6のソースを2012のに変える仕事してるけど、VB6が自由度高すぎてコードが何でも有りになってるから
前作ってた奴には死んで欲しいと思ってるけど、多分考え無しにタラタラ組むことが許されるのがVB6やVBAの
良いところと言う捉え方も出来るからね。
縛りになる話は.Net化したら考えようかなぁ。
0034デフォルトの名無しさん
2014/11/06(木) 21:43:23.56ID:7MwqrfCh荒らすな、死ね
0035デフォルトの名無しさん
2014/11/06(木) 21:57:31.40ID:QIGtHRrB人に死んで貰うにはまず自分が死ぬのが礼儀だろう。全く非常識な。
0036デフォルトの名無しさん
2014/11/06(木) 22:03:10.17ID:Z8ZJpo3fこのような形式のよくあるリストがあって重複を削り一種、一表示にしたいんです
マクロに慣れてなくてなるべく簡潔なもので動作させたいと思ってます
条件としては、重複は削りつつも従来の順番にして二番目以降の列を消去したいのですが
上記の例でいうと
・A列に上から1.2,3・・と自然数を入れる
・電話番号でソート
・上下の隣り合う数値の同値判定で下行削除
・A列の自然数で再ソート、自然数削除
というコンセプトでいこうと思ってるのですがもっと簡易なアプローチって無いですか?
verは2000です
0037デフォルトの名無しさん
2014/11/06(木) 22:06:31.10ID:Z8ZJpo3f0038デフォルトの名無しさん
2014/11/06(木) 22:26:31.95ID:asAtJKxwオブジェクト型に限っては言えてるかも
そもそもオブジェクト型は型名が指し示す意味合いが、他の型とは一段階違う
例えば「【私】の【年齢】を示す【整数】」のように、「�@の�Aを示す�B」と見ると
整数とか文字列ってのは�Bに該当するが、オブジェクトの場合は�Bが"オブジェクト"なので
型名が�Bではなく�Aを指していることが多いからね
だから、整数や文字列では、型名から接頭語を決める場合と使途や意味合いから
接頭語を決める場合とで、接頭語は別になるけど、オブジェクトの場合は、
型名から決めても使途や意味合いから決めても、接頭語は同じになることが多いので
だったら積極的に型名に合わせた方が分かり易いって考え方もある
>>36-37
DictionaryでExistsがTrueなら削除とか、WorksheetFunction.CountIfで2以上なら削除とか
因みに、直接行を消していくなら、ループは下からStep -1で回した方がいい
0039デフォルトの名無しさん
2014/11/06(木) 23:34:19.00ID:Y7ovwliu前スレ終盤でも似たような話題があった
peace.2ch.net/test/read.cgi/tech/1403911485/977-
回答としては
peace.2ch.net/test/read.cgi/tech/1403911485/991-993
の辺りが特に役立つかもね
0040デフォルトの名無しさん
2014/11/07(金) 01:11:39.47ID:urA5aAtfSheet上で、日付、品名、売上額、品名分類、他が一行に用意されていて、一年分ずら〜っと書き込むようにしています
このSheetの右余白を使って ピボットテーブルで縦に日付(月別?)、ヨコに品名分類(6種類ほど)がまとめられています
この形式のSheetで担当者一人分なのですが、担当が年に30人ほど必要です(出入りがあるので総数だと50ほどありますが)
このSheetをコピーして増やしていきたいのですが、ピボットテーブルのデータソースがどうしても最初の一枚を引き継いで
しまいますので、コピーのたびに設定し直さなければなりません マクロやVBAでやればボタンひとつで処理できますか?
0041デフォルトの名無しさん
2014/11/07(金) 03:12:33.58ID:dhqtnvAi0042デフォルトの名無しさん
2014/11/07(金) 07:20:22.27ID:vOQaMsuZ同意。俺は別にナントカ主義じゃ無いけど、そもそも名前を役割にそって付けるのは他の言語では常識。役割が見えれば
当然型が見えてくるし、それが見えるような名前にしなくてはならない。
>>32
別に。使用するブックやシートの意味合いが混在するようなことの方が問題。それが無ければ必要ない。
>>38
そのオブジェクト型と言っているのはAs Objectで指定した型なのか、インスタンスを格納できる型全般を指しているのか
曖昧だけど、どっちにしても名前に統一性がないと駄目なんじゃないの?
0043デフォルトの名無しさん
2014/11/07(金) 10:24:00.18ID:urA5aAtfPivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
ActiveSheet.Name & "!R10C5:R10000C15", Version:= _
(ry) でなんとかできました ありがとうございました まぁ、他の壁が・・ ですけど
0044デフォルトの名無しさん
2014/11/07(金) 13:02:39.82ID:8CIPGsDJインテリなんとかという機能を使うために
参照設定をするとおもいますが
どんな場合にどんな参照設定をしないといけないかの対応表みたいなのはありますか?
0045デフォルトの名無しさん
2014/11/07(金) 13:08:40.05ID:s/45pYbD> どんな場合にどんな参照設定をしないといけないかの対応表みたいなのはありますか?
ありません。
0046デフォルトの名無しさん
2014/11/07(金) 13:17:17.69ID:8CIPGsDJ0047デフォルトの名無しさん
2014/11/07(金) 13:17:43.36ID:8CIPGsDJ0048デフォルトの名無しさん
2014/11/07(金) 13:21:39.79ID:iJ3Rtjo/Googleって対応表が一番参考になるよ
そもそも、参照設定の対象になるActiveXコンポーネントって、
個人製作のものまで含めたら、おそらく十万や百万なんて単位でも全然足りない
(俺が作った物だけでも、公開したもので8つ、自分だけで使ってる非公開のものは通算100以上ある)
人によって、どのActiveXコンポーネントを良く使うかも違えば
パソコンによって、どのActiveXコンポーネントがインストールされてるかも違うので
必要なときに必要な物をググるのが一番手っ取り早い
そこから、自分が良く使う物の覚え書きを作ってもいいし、それ以前に頻繁に使えば覚えるだろうし
0049デフォルトの名無しさん
2014/11/07(金) 14:17:57.66ID:bn4pK3Yyある程度使えるようになるには1日1時間勉強したとしたらどのくらいかかりますか?
もちろん人によってそれぞれなのはわかりますが、
大雑把でかまわないので教えてください
0050デフォルトの名無しさん
2014/11/07(金) 14:32:06.52ID:s/45pYbD> もちろん人によってそれぞれなのはわかりますが、
いいや、全然わかってないね。これを読むべし。
『60%の人間はプログラミングの素質がない』
http://cpplover.blogspot.jp/2012/05/60.html
> 大雑把でかまわないので教えてください
人に聞くより、入門書を買ってまず10時間勉強してみれば、その本1冊終えるのにどれくらい
かかるか予想できるんじゃないの?
まず10時間勉強するのも面倒?
0051デフォルトの名無しさん
2014/11/07(金) 14:45:51.84ID:bn4pK3Yyわかりました
ありがとうございます
0052デフォルトの名無しさん
2014/11/08(土) 02:25:59.11ID:/bwN1tJ/仕事でVBAがなんとなく使えるようになるまで大体3ヶ月くらいとして、休みの日もあるからひと月25日とすると、
1日8時間費やしていると考えて
3*25*8で600日、土日は勉強しないと考えると大体2年くらいかな。
でも1時間では集中しきれないし、途中で忘れ易くなることも考えると3年くらいじゃない?本当に適当で大雑把に言えば。
0053デフォルトの名無しさん
2014/11/08(土) 03:42:49.29ID:TaPEwTUqEXCELがある程度使えるとしてVBAなら
基本的なプログラムの素養があれば3日ぐらいの講習受ければ使えるし
初心者でも1週間ぐらいの講習でそれなりに使えるだろ
0054デフォルトの名無しさん
2014/11/08(土) 05:04:47.62ID:24TzniH2「自分が使って、とりあえず動くコード」
までなら3日〜1週間、素養が有れば1日で到達できるが
「他人が使って想定外の操作をしても問題なく動く(データが破損したり結果がおかしくなったりせず、何をしても
実行エラーは出ずに、誤った値や操作は入力制限や操作制限で防いだりポップアップメッセージなどで知らせる)コード」
ってことになると、処理的には簡単なものでも、いろんな事態を想定して対処出来る経験なども必要なので
他言語の経験でも無い限り、素養があっても3日や1週間じゃ無理っしょ
0055デフォルトの名無しさん
2014/11/08(土) 05:48:27.71ID:/bwN1tJ/済まない。「何となく」の表現が曖昧で温度差が有ったようだ。
1週間ではプログラムの構成を覚えるのがやっとのところだと思う。
その辺りからやっとブックやシート、レンジ、セルの使い方が何となく分かってくる頃。
当然、仕事として使うにはまだまだのレベル。
1ヶ月あれば簡単なツールで動きゃいいんだよレベルのものが作れるようにはなるかも知れないが、
コードレビューでぶっ叩かれるレベルと言ったところかな。
で、当然仕事であればOracleやSQLServerからSQLで値を取得して表示したり、フォームを使ったり、
普通に仕様書に書かれていることは論理的に実現可能なことは実現しなければならないので、
その調査や作成、掛かる時間をなんとなく割り出せるくらいになるまで3ヶ月くらい掛かるんじゃないかと。
もう少し上のレベルになれば基底部分のクラス化や、有る程度のツールのスケルトンを作成するようになってくるけど、
そこに至るまでは半年くらい掛かるんじゃないかと思う。
だから最初に書いたように、「仕事」でなんとなく使える様になるまでがこのくらいの期間じゃないかな。
まぁ、「俺はそんなの1週間で出来るようになったし、周りの連中もそうだぞ(ドヤァ」と言うのであれば、
俺や俺の周りの連中がプログラマーとしての素養が無いんだろうよ。
0056デフォルトの名無しさん
2014/11/08(土) 08:24:52.54ID:I+ma7ZL8簡単な練習問題が解ける → 1〜2週間
自分で使うだけのマクロ → 1〜2ヶ月
入力フォームなどがあって他人も使う → 数年
0057デフォルトの名無しさん
2014/11/08(土) 13:10:36.61ID:19yT2fPYスタートラインが違うからなぁ。
そこがはっきりしないと議論にならないというか、少なくとも俺には判断出来ないよ。
0058デフォルトの名無しさん
2014/11/08(土) 17:26:29.18ID:0hkqiyvl>プログラムとかさっぱりの素人
って書いてるやん
0059デフォルトの名無しさん
2014/11/08(土) 19:07:28.68ID:TaPEwTUqシステム開発と言える程度の規模で、
コードレビューで叩かれないレベルのプログラム半年でかけたら期待の新人あらわる、ってなるわw
0060デフォルトの名無しさん
2014/11/08(土) 19:58:21.71ID:/bwN1tJ/まぁExcelでVBAだから。
その範囲で何をもってシステム開発と言える規模になるのか、
ツール開発程度となるのか、明示して貰わないことには何とも言えない。
0061デフォルトの名無しさん
2014/11/08(土) 21:02:13.73ID:TaPEwTUq>まぁExcelでVBAだから。
だから、何?
だから、せいぜい自分で使うツール開発程度の話でしょ、ってなるなら解るが
どうも>>55の主張はそうじゃなさそうだしな
システム開発規模って言い方が悪かったなら
プロのプログラマーとしてちゃんとしたものが出来るようになるまでは半年はかかるんじゃね
って言いなおしても良いよ
お前の主張とそう大差ないと思うけど
0062デフォルトの名無しさん
2014/11/08(土) 21:55:45.59ID:/bwN1tJ/言い方がいいか悪いかじゃなくて、
システムの開発規模がどうと言う話とプロのプログラマーの話って全くカテゴリの違う話が同列に並べられているのか理解に苦しむな。
3ヶ月掛かるなら素養がないと言って来たのもそっちだし、システム開発規模なら半年で期待の新人現ると言ったのもそっち。
だったら最初は何を指してそう言ったのか、システムの開発規模って、システムと呼ばれるもの以外との
境界線を明示してくれって言ってるだけでしょ?
プロのプログラマーがちゃんとしたものと言うけど、
それは何を組む上でのプログラマーなのさ?システム?ツール?で、その規模の境界線は?
それによって全然話が違ってくると言っているんだよ。
そこまで言うならそちらの言うシステムの規模ってどこからなのかと、
それをシステムって呼ぶ根拠を明示して欲しいな。そちらが持ってきた話なんだから。
0063デフォルトの名無しさん
2014/11/08(土) 22:03:57.70ID:I+ma7ZL8今は素人が適当に作ったプログラムでも実用上問題ない程度の結果が出せちゃうからなあ
0064デフォルトの名無しさん
2014/11/08(土) 22:27:08.48ID:TaPEwTUq>だったら最初は何を指してそう言ったのか
事務員が自分の「仕事」で使うちょっとしたツールを、なんとなく動くレベルで作るのに、だよ
0065デフォルトの名無しさん
2014/11/08(土) 22:28:11.67ID:/bwN1tJ/後の方は?
0066デフォルトの名無しさん
2014/11/08(土) 22:35:00.69ID:TaPEwTUqプロのプログラマが「仕事」で作るプログラム
もうこれでこの話題終了でいいだろ
0067デフォルトの名無しさん
2014/11/08(土) 22:36:11.75ID:/bwN1tJ/なんで?
それと回答になってない。
0068デフォルトの名無しさん
2014/11/08(土) 22:42:59.60ID:TaPEwTUqプログラムだけに1日8時間没頭できるとして
事務員が自分の「仕事」で使うちょっとしたツールを、なんとなく動くレベルで作るのに
3カ月かかるようなら、プログラミングの才能が無い
プロのプログラマとして一人前の仕事ができるようになるまで
6か月しかかからなかったら優秀
俺の主張は以上
もうこれ以上この件ではレスしない
0069デフォルトの名無しさん
2014/11/08(土) 22:48:45.18ID:I+ma7ZL8プロなら想定外のデータが入力された時のことも考える
どれぐらい多様なエラーに対応できるかで能力の差が出る
OSなんかのセキュリティホールって、ようするに想定外の部分を突いてくることが多いんで
そういうのをいかに潰していくか、かつ処理が重くならないようにするかが腕の見せ所でもある
0070デフォルトの名無しさん
2014/11/08(土) 22:53:30.62ID:/bwN1tJ/最初に絡んできたのはそっち。
ついでを言うと学生さん?
仕事をしていれば仕様や会話に不明瞭な部分があったり、矛盾点があれば突っ込まれるのは当たり前のこと。
そうなれば説明責任が出てくるからキチンと説明しなければいけなくなる。
良かったね、2ちゃんでw
>>68みたいなこと、普通職場やお客さんのところで言えば誰からも相手にされなくなるよ。
0071デフォルトの名無しさん
2014/11/08(土) 23:02:02.42ID:qbv6PHnD現実感がまるで無い
0072デフォルトの名無しさん
2014/11/08(土) 23:16:09.28ID:TaPEwTUqお詫び申し上げておきますわ
よかったわ。2ちゃんで
>>71
1日1時間の人と1日8時間の人で、同じ日数で比べろと?
ほんとに最後のレスにする気なんだが、煽り耐性低いな俺w
0073デフォルトの名無しさん
2014/11/08(土) 23:18:17.28ID:/bwN1tJ/うん。黙ってた方がいいと思うよ。
説明能力じゃなくて考えが足りな過ぎ。
0074デフォルトの名無しさん
2014/11/08(土) 23:25:52.93ID:TaPEwTUq後学のためため>>68の主張の、どこが考えが足りないかお教え願えますが
0075デフォルトの名無しさん
2014/11/08(土) 23:28:16.60ID:/bwN1tJ/0076デフォルトの名無しさん
2014/11/08(土) 23:29:32.56ID:TaPEwTUqでは、>>68の主張に対する意見は無いという事でよろしいので?
0077デフォルトの名無しさん
2014/11/08(土) 23:31:41.15ID:TaPEwTUq>>75
では、>>68の主張に対する意見は無いという事でよろしいので?
0078デフォルトの名無しさん
2014/11/08(土) 23:32:48.61ID:/bwN1tJ/何で?
全部繋がってる話だよ。
何を主張するのも勝手だけど、根拠に欠けているって自分で思わない?
0079デフォルトの名無しさん
2014/11/08(土) 23:38:28.98ID:TaPEwTUq>>68は、技能習得にかかる時間にたいする私の主観です
根拠を求められても提示できません
>>52の3カ月も主観であり根拠は無いと思われます
今回の論点は主観の相違であり、その点で>>68と意見の相違があるならお聞かせ下さい
0080デフォルトの名無しさん
2014/11/08(土) 23:49:52.29ID:cSCqZz6kじぶんで >>良かったね、2ちゃんでw て書いてるくせに、世間を例えにするのはあたまがおかしいひとだと思います
書いてることと考えてることが乖離しているひとだと思います けいすけくんはばかだと思います ひまわり学ky(ry
0081デフォルトの名無しさん
2014/11/08(土) 23:51:24.07ID:/bwN1tJ/3ヶ月?うん。今まで人に教えてきた俺の経験からの主観。だけど経験から言ってるから別に思いつきって訳ではないよ。
それと言ったでしょ、全部繋がっているって。
結局そっちが提示したシステムの規模の話ってその境界線の線引きと根拠って、
考えが有って話しているなら何で答えられないのさ?
否定するなら、今度は否定するなりの根拠を挙げてみなよ。
0082デフォルトの名無しさん
2014/11/09(日) 00:21:14.32ID:n1bZkGQ9システム開発うんぬんにかんしては、>>61で撤回したものとご理解いただければ幸いです
したがってその境界とは
事務員が自分の「仕事」で使うちょっとしたツールを、なんとなく動くレベルで作るの
と
プロのプログラマとして一人前の仕事ができるようになるまで
の間と言う事になるかと思います
すみませんが私の説明能力ではこの差を簡潔に説明する事は不可能のようです
私の主観ではこれらには大きな差があると思うのですが
これらに差がないので>>68の主張は理解できないと言う事でしょうか?
つか連続投稿ってなんだよ書き込めねー
疲れたホントにこれで最後にするわ
0083デフォルトの名無しさん
2014/11/09(日) 00:40:17.44ID:99/SwKWp撤回の意味が分からない。何を撤回したのかな?
プロのプログラマーとして一人前の仕事ができるようになるまでと言う話はそんなに何回も言わなくても理解している。
で、結局>>62で言ってることは理解してくれているのかな?
理解していればこちらがそれを理解した上で話していることも理解できるよね。
その上での回答を求めているんだけど、何で話を堂々巡りにさせようとしているのかな?
0084デフォルトの名無しさん
2014/11/09(日) 01:05:23.28ID:A9KOM1Yd0085デフォルトの名無しさん
2014/11/09(日) 01:23:13.97ID:XD0yYqPY0086デフォルトの名無しさん
2014/11/09(日) 07:21:04.45ID:lclUDDtt0087デフォルトの名無しさん
2014/11/09(日) 14:26:55.05ID:qMMOH0c10088デフォルトの名無しさん
2014/11/09(日) 18:53:10.40ID:1dzCgWwj0089デフォルトの名無しさん
2014/11/10(月) 00:02:39.48ID:7hilT9kuVBAの稼働中にControlオルトブレイクで停止させられますが、その場合処理は完全停止してしまいますが。
1時停止させ完全な計算途中の続きから再開させる事はできないのでしょうか?
0090デフォルトの名無しさん
2014/11/10(月) 00:06:59.19ID:aSG9FVajCtrl+Break
0091デフォルトの名無しさん
2014/11/10(月) 00:14:39.77ID:7hilT9kuそもそもオルトは不用で ボタンの継続を押せば良かったのですね。ありがとうございます。無意識にEnterを押していました。
0092デフォルトの名無しさん
2014/11/10(月) 00:34:22.95ID:aSG9FVajCtrl+Breakのあと、デバッグボタンを押すと中断した時点での変数の内容とか確認できる
再開はF5
0093デフォルトの名無しさん
2014/11/10(月) 00:45:39.81ID:7hilT9kuありがとうございます。画面が超高速でちらちら点滅して焦ってしまいましたが冷静にボタンに書かれてある文字を読めば何てことは無い話でした。
009488
2014/11/10(月) 01:00:43.51ID:7hilT9kui7の高速なマシンで動かしてみましたが、見たところ速さはほとんど変わらないようですが。これはもっと高速に動かすことはできないのでしょうか?
Excelは2007ですがバージョンが高いと変わりますでしょうか?
0095デフォルトの名無しさん
2014/11/10(月) 01:10:36.53ID:aSG9FVajたった8000個の処理で時間がかかるのは、やり方が悪いとしか
まずは
Application.ScreenUpdating = False
Application.Calculation = xlManual
あたりを試す
あと、お前は88じゃなくて89だろ
009689
2014/11/10(月) 01:16:13.31ID:7hilT9ku>たった8000個の処理で時間がかかるのは、やり方が悪いとしか
まずは
Application.ScreenUpdating = False
Application.Calc
なるほど試して見ます。
>お前は88じゃなくて89だろ
その通りです。失礼しました。。
0097デフォルトの名無しさん
2014/11/10(月) 01:31:50.06ID:3AABUWOY0098デフォルトの名無しさん
2014/11/10(月) 01:40:00.66ID:E0mAzh+R0099デフォルトの名無しさん
2014/11/10(月) 01:50:09.23ID:z7aClQLS>VBA初心者ですが
との事なので
まずこれかな?
・セルへアクセスする毎に "Select","Activate"してるなら
使わないようにする
あと
・一括で配列へ入れて 配列内で処理して結果のみをシートに書き込む
0100デフォルトの名無しさん
2014/11/10(月) 20:48:48.83ID:TYJYPyhCVB.Netではマルチスレッドが使えるから、並列処理で作りようによっては早くなるけど、Excelでも頑張れば出来るかも。
別のExcelアプリを立ち上げて、そっちにもやらせるとか。アドインファイルとかにして。
0101デフォルトの名無しさん
2014/11/11(火) 05:25:41.03ID:Ti7qRGC+同期を取ろうとすると、呼び出し元側は呼び出し先が終るのを待ってることになるから
スレッドというかプロセスがマルチになっても、実質稼働するのは1つだけか、同期不要な処理にしか使えないかになる
そしてアドインは同じスレッドで実行されるので、これもまた意味がない
VBAで処理の一部をマルチスレッド化したければ
外部に渡した上で、その外部が自身だけでマルチスレッドを実現できる必要がある
0102デフォルトの名無しさん
2014/11/11(火) 07:29:05.04ID:mGY8vM+zありゃあ、マルチスレッドの存在意義を全否定しちゃってるね。
そりゃ、別スレッドなんだから非同期は当たり前だよね。
だから同期しなくてもいい所で使うんじゃない。別のシートにそれぞれ全く関係ない表を作るときとか。
それに同期を取るとしたって、それぞれが別のスレッドで処理されている訳だからその分速くなると思うけど。
アドインに関しては確かにそうだけど、アドインにしといて外から処理するExcelのアプリを非表示にしておけば
シートを持たない表示されない状態を作れるから全く使い道がない訳じゃ無いよね。
.Netだって同じフォームを別スレッドで操作するときは
色々有ってデリゲート用意したりするようなお作法が必要になるけど、でもみんな使うよ。
弊害って言うけど、どうしたらどのような弊害が起こるか知っていれば弊害が起きないように作っておけばいいんじゃないの?
0103デフォルトの名無しさん
2014/11/11(火) 10:22:25.51ID:+yypG0390104デフォルトの名無しさん
2014/11/11(火) 10:32:05.15ID:+FZC/J3Xその通りだと思うわ。
0105デフォルトの名無しさん
2014/11/11(火) 10:53:33.84ID:A6oJ5TwJ> VBAで処理の一部をマルチスレッド化したければ
> 外部に渡した上で、その外部が自身だけでマルチスレッドを実現できる必要がある
Excelで普通に使える手段としては、アウトプロセスCOMを使えば、簡単に非同期化できて同期も取れる。
もちろん、COM動作中もExcelも動作できる。
0106デフォルトの名無しさん
2014/11/11(火) 11:09:38.02ID:85Ngfvs90107デフォルトの名無しさん
2014/11/11(火) 14:26:41.75ID:VkoiWuJyそれを、ここに聞きに来るVBA初心者が実装できるとでも思ってるの?
0108デフォルトの名無しさん
2014/11/11(火) 14:52:58.59ID:mGY8vM+z俺、初心者だけど頑張るよ。
0109デフォルトの名無しさん
2014/11/11(火) 14:56:58.94ID:A6oJ5TwJなるほど、始まりは>>94か。
sheet.activateとかrange.select -> selection.copyとかが大量に入ってて遅いのかな。
0110デフォルトの名無しさん
2014/11/11(火) 20:26:09.76ID:NFiDAzslこのユーザフォームというやつはさわってもActivateと認定してくれないことがよくあって困ります。
よくある症状だと思うのですが、みなさんどうやって対応していますか?
ふつうに下記のイベントプロシージャを使っているのですが
Private Sub UserForm_Activate()
(コード)
End Sub
0111デフォルトの名無しさん
2014/11/11(火) 20:45:17.95ID:VkoiWuJyたしかに実行されるべきActivateが実行されない事も無いわけではないが
普通ちょくちょく起こるようなもんじゃないと思うけど
おそらくActivateの発生条件を勘違いしてるだけだと思う
Activateを発生させる要因となるコードの直前にDoEventsいれると直るかもね
0112デフォルトの名無しさん
2014/11/11(火) 21:43:21.94ID:NFiDAzslどういうことでしょうか?
Activateを発生させたいのはユーザがフォームをマウスクリックでさわって画面の前面にきたときのみなのですが。
要因はそれ以外は考えていません
0113デフォルトの名無しさん
2014/11/11(火) 22:20:56.23ID:mGY8vM+zDo EventsはWindows側に一度処理を明け渡すことによって、
それまでの画面更新を表示させるようにしたりするけど、
一連の処理が行われている最中でない場合、何かもたらされる効果があるのだろうか。
0114デフォルトの名無しさん
2014/11/11(火) 22:28:13.88ID:NFiDAzsl黙ってしまってるけど、どうでしょう?
やっぱりフォームをさわってActivateしてもAvtivateのイベントプロシージャが動かないでしょ?
0115デフォルトの名無しさん
2014/11/11(火) 22:42:01.18ID:NFiDAzsl(1) Do Events
(2) Sleep関数 (WinAPIのやつ?)
(3) その他なんかあったっけ?
の違いが分かるオトコになりたいのですが、違いはなんですか?
0116デフォルトの名無しさん
2014/11/11(火) 23:17:44.63ID:85Ngfvs9イベントで呼んだコードがうまく動かなくてマクロを途中で止めた場合、
enableeventsがfalseになってることがあるけど、違う?
0117デフォルトの名無しさん
2014/11/11(火) 23:25:24.67ID:NFiDAzsl違う。
イミディエイトウインドウで
? Application.Enableevents
と試したらTrueだった
0118デフォルトの名無しさん
2014/11/11(火) 23:46:46.57ID:85Ngfvs9http://msdn.microsoft.com/en-us/library/office/gg264186(v=office.15).aspx
The Activate and Deactivate events occur only when you move the?focus within an application. Moving the focus to or from an object in another application doesn't trigger either event.
0119デフォルトの名無しさん
2014/11/12(水) 01:07:39.74ID:pRoCUi6HForm.Activate イベント (Access):
http://msdn.microsoft.com/ja-jp/library/office/ff845446(v=office.15).aspx
0120デフォルトの名無しさん
2014/11/12(水) 01:08:34.88ID:pRoCUi6H0121デフォルトの名無しさん
2014/11/12(水) 04:07:20.88ID:44wGY+45どっから画面の前面になったのかによるけど
フォームをクリックしたからって必ずしもActivateされるわけじゃないぞ
0122デフォルトの名無しさん
2014/11/12(水) 04:15:09.34ID:44wGY+45UserForm1
Private Sub UserForm_Activate()
MsgBox "1"
End Sub
UserForm2
Private Sub UserForm_Activate()
MsgBox "2"
End Sub
ThisWorkbook
ub test()
UserForm1.Show vbModeless
DoEvents
UserForm2.Show vbModeless
End Sub
これでDoEventsの有りなしで俺の環境では動作が変わる
全ての環境でそうなるわけではないかもしれんが
DoEventsなしでは"2"のMsgBoxは表示されない
"1"のMsgBoxの前にForm2の表示が割り込むからだと思うが
0123デフォルトの名無しさん
2014/11/12(水) 04:23:58.14ID:44wGY+45>>115
前もどっかで同じ質問みたことあるけど
どういう考え方をしたらDoEventsとSleepが同じ所があるように思うんだろ
むしろ同じと思うところを言ってみてくれ
そしたら違いを説明できるかもしれん
0124デフォルトの名無しさん
2014/11/12(水) 05:28:22.03ID:RC0oVKa+一連の処理が行われている最中やん。
>>112でマウスでクリックして全面に来たときって言ってるんだからそれとは状況が違うよ。
0125デフォルトの名無しさん
2014/11/12(水) 17:02:39.01ID:yIWk1BZLイベントプロシージャを実行させることって
できないんでしょうか?
0126デフォルトの名無しさん
2014/11/12(水) 18:28:07.29ID:44wGY+45>>122は、Activate実行されない状況と、それがDoEventsで直る例を示しただけ
マウスクリックで前面にってのは、それがActivateを発生させると勘違いしてると思ってる
0127デフォルトの名無しさん
2014/11/12(水) 18:43:26.08ID:44wGY+45フォームとワークシートの切り替えをVBAだけで検知するのは無理じゃないかな
切り替えただけでは何も起こってないと考えて
その次の操作をとらえる方向で考えるしかないんじゃない
0128デフォルトの名無しさん
2014/11/12(水) 18:47:17.73ID:yIWk1BZLではどうすれば解決するでしょうか?
0129デフォルトの名無しさん
2014/11/13(木) 00:04:38.73ID:MT+2Jvvy0130デフォルトの名無しさん
2014/11/13(木) 05:16:02.87ID:IgNFF7zY>>127の下2行は無視か?
0131デフォルトの名無しさん
2014/11/13(木) 08:08:11.50ID:9b2ERrU2「その次の操作をとらえる方向」とはどういう意味でしょうか?
言葉の意味がさっぱり分からないのですが。
0132デフォルトの名無しさん
2014/11/13(木) 16:22:16.67ID:HT9JpLL8イベントプロシージャで
0133デフォルトの名無しさん
2014/11/13(木) 18:55:35.02ID:9b2ERrU2ではどうしますか?
0134デフォルトの名無しさん
2014/11/13(木) 22:24:06.17ID:UcTK4OI+そのイベントプロシージャで
0135デフォルトの名無しさん
2014/11/13(木) 23:28:42.48ID:Zqa4UpvX0136デフォルトの名無しさん
2014/11/14(金) 00:13:05.74ID:Idg0Wndh渡した相手先ではセキュリティのメッセージに「コンテンツの有効化」のような呼称が付きますから、Excelコンテンツ?
0137デフォルトの名無しさん
2014/11/14(金) 00:30:39.59ID:2IEK62nJ0138デフォルトの名無しさん
2014/11/14(金) 00:33:49.21ID:M8CPNhFZおそらく区別して呼びたいであろう>>136には不満かも知れないが、
正式には「Excelブック」あるいは「Excelワークブック」だよ
(一部で勝手に呼び名を付けている場合もあるが)
マクロを組み込もうと、ユーザーフォームを作り込もうと、
それは作り手から見て「アプリ的な開発が出来る」だけであって、
元々ブックに備わった機能を使うか使わないかの差でしか無い
故にブック本来の機能を何処まで駆使しても、ブック以外のなにものでもない
数式すら使わず、単なる住所録を作っても、ExcelブックはExcelブック
配列数式やピボットテーブルなどの機能を駆使しても、ExcelブックはExcelブック
VBAやユーザーフォームを駆使しても、ExcelブックはExcelブック
因みに、Excelアプリって言うとExcelの本体、EXCEL.exeや
VBAでのExcel.Applicationのことになるし、Excelコンテンツって言うと、
数式などもコンテンツのうちに入る
とマジレスしてみる
0139デフォルトの名無しさん
2014/11/14(金) 00:45:21.87ID:dNg3ZgCnマクロとかフォームはエクスポート出来るんじゃなかったっけ。
その拡張子の名称がソレなんじゃね。
0140デフォルトの名無しさん
2014/11/14(金) 01:27:53.90ID:IOJc8l9f0141デフォルトの名無しさん
2014/11/14(金) 02:00:14.78ID:FMoQUF/X0142デフォルトの名無しさん
2014/11/14(金) 05:13:04.48ID:PebWXCKg0143デフォルトの名無しさん
2014/11/14(金) 05:28:45.41ID:enGQPIOe正式名称と言えば皆が言ってる通りになる。
そしてそれを何か定義付けて呼ぶ場合は仕事場の環境によってまちまち。
アプリと呼ぶところもあればシステムと呼ぶところもあるし、ツールと呼ぶところもある。
ただ、上で言ってる人もいるけど、Excel自体がアプリと呼ばれるから
自分が作ったものもそう呼ぶと意味が混同しそうになる。
けして間違いでは無いんだけどね。
0144デフォルトの名無しさん
2014/11/15(土) 00:49:46.26ID:rCnTZWHP0145デフォルトの名無しさん
2014/11/15(土) 08:08:34.96ID:V1p3lLBN一般的にもmsdnでもマクロと呼んでいるものの、マクロと言えばExcel4.0までのものなんじゃないかと。
つまりVBAは言語であって厳密にはマクロとは言えないかも知れない。
詳しくはこの辺で。
http://officetanaka.net/excel/vba/beginner/01.htm
0146デフォルトの名無しさん
2014/11/15(土) 13:05:58.46ID:+moW/MyHだねー
ブック名(=ツール名)が周知されるまではそう
0147136
2014/11/15(土) 13:26:11.27ID:fgZJ2TH/「正式名称」って、つい、夜中でボーっとしてたんで違和感ありつつ書き込んじゃったんで、誤解の元にしちゃったのは反省してます
いちばんかっこいい呼び名 って書けば良かったですかね >>135 さんに名付けてもらいたかったんだけど
それとかいちばんクール いちばんインテリジェンスを感じさせる いちばん最先端な・・ みたいな
>>137 が個人的には爆笑でしたけど、さすがに相手先に「○△□ウィルス」です って渡せませんのでサブタイトルぐらいでw
仕事場の環境で ってのには納得ですね どちらもそうなんですかね
0148デフォルトの名無しさん
2014/11/15(土) 15:16:28.76ID:8Ioaetpv0149デフォルトの名無しさん
2014/11/15(土) 18:18:08.57ID:V1p3lLBN0150デフォルトの名無しさん
2014/11/17(月) 15:29:54.73ID:CaX8N17hプログラム自体は初心者じゃないから「Hello World」から始めるんじゃなくて
実務に使える知識が得られるいい本があれば助かる。
今やってる仕事をマクロで処理すること考えろってのはなしね。
仕事干されて何もやらせて貰えない&触らせてもらえないんだわさ。
その時間を活用したいからってのが手を出す理由だから。
はぁ、死にたい。
0151デフォルトの名無しさん
2014/11/17(月) 15:42:55.43ID:zW5xq0Zu0152デフォルトの名無しさん
2014/11/17(月) 16:08:04.06ID:CaX8N17h経営者への宗教的崇拝を求められる社風についていけないのが理由だからそこの改善は無理。
0153デフォルトの名無しさん
2014/11/17(月) 17:41:27.97ID:BfgB+UiD前の会社そんなんだったわ
0154デフォルトの名無しさん
2014/11/17(月) 17:45:12.23ID:SNTsTnh3>プログラム自体は初心者じゃないから
プログラミング中級以上ならVBAのヘルプで十分
ヘルプ見ても判らないなら初心者
0155デフォルトの名無しさん
2014/11/17(月) 19:27:23.53ID:0+iPWAnC0156デフォルトの名無しさん
2014/11/17(月) 19:29:24.64ID:YZQ9lAGLevent、クラス、typeとか使い出すとhelpじゃものたりない。
0157デフォルトの名無しさん
2014/11/17(月) 21:55:03.32ID:7QCa7u920158デフォルトの名無しさん
2014/11/17(月) 22:59:29.51ID:Ob56mXwO標準モジュール、フォームのモジュール、各シートのモジュールは
それぞれJavaでいうクラスのインスタンス化したものに相当すると考えて間違っていないですか?
そのへん、JavaとExcelのVBAの関係についてくわしく教えていただけると助かるのですが・・・
0159デフォルトの名無しさん
2014/11/18(火) 00:37:34.64ID:SoogDxuRJavaはそんなに知らないけど、シートはあってて、フォームは微妙で、モジュールは違うと思う。
シートは作った時点でシートクラスのインスタンスとして存在する。
モジュールはJavaで言う所のシングルトンなクラスに近いけど、クラスのインスタンスとして
ヒープエリアに展開されることはない。スタティックエリアで直接やりとりを行う。
フォームはどうなんだろ?生成してもしなくても使えたような気がするから、よく分からない。
0160デフォルトの名無しさん
2014/11/18(火) 01:07:09.19ID:GOsptD/5Private MTEx As TextKeyEvent
Set TKEx = New TextKeyEvent: Call TKEx.Init(Me.kx)
0161デフォルトの名無しさん
2014/11/18(火) 10:58:59.78ID:xTCwm9fo> Javaの初心者で、ExcelのVBAも初めてみたのですが
> 標準モジュール、フォームのモジュール、各シートのモジュールは
> それぞれJavaでいうクラスのインスタンス化したものに相当すると考えて間違っていないですか?
質問の意図がよくわからないけど、VBEで見るコードは全てCodeModuleクラス(のインスタンス)だよ。
Javaはよく知らないけど、SheetやWorkbookなどのオブジェクトと対になった、自動生成されたstaticな
インスタンスってイメージ。
例外はクラスモジュールで、これは普通にNewしてインスタンス化する。
0162デフォルトの名無しさん
2014/11/18(火) 11:07:16.50ID:xTCwm9foというのは間違いか。
いずれにしても、
> SheetやWorkbookなどのオブジェクトと対になった、自動生成されたstaticなインスタンスってイメージ
というのは間違いないんだけど、何でそんなこと知りたいの?
0163デフォルトの名無しさん
2014/11/18(火) 11:13:43.49ID:WVbEeNksいまアクティブになっていないブックやシートを
もしアクティブにしたらアクティブになる予定のセルアドレスって
どうやって取得しますか?
0164デフォルトの名無しさん
2014/11/18(火) 11:20:02.27ID:WVbEeNksいまアクティブになっていないブックを
もしアクティブにしたらアクティブになる予定のシート番号って
どうやって取得しますか?
0165デフォルトの名無しさん
2014/11/18(火) 12:51:57.54ID:HMO3R2TXその質問の付近に答え書いたはずだけど
0166デフォルトの名無しさん
2014/11/18(火) 16:00:49.30ID:+Ns0XI27・カスタマイズしたツールバー(マクロボタン)のコピー
C:\Documents and Settings\(ユーザー アカウント)\Application Data\Microsoft\Excel
にある「Excel11.xlb」を該当するフォルダにコピー
これでOK
・マクロのコピー
VB編集ウィンドウを開いて
VBAProjekt(PERSONAL.XLS)>標準モジュール
にある各ファイルをエクスポートし、別のPCの同編集ウィンドウでインポートする
これでマクロのファイルはコピーされるんだけど
マクロボタンに登録したパス(ユーザー アカウント部分)が違うために
個別に全てのマクロを再登録し直さなければいけない
C:\Documents and Settings\(ユーザー アカウント)\Application Data\Microsoft\Excel\XLSTART
\PERSONAL.XLS
このパスを指定してまとめて登録する方法って無いですか?
0167デフォルトの名無しさん
2014/11/18(火) 17:08:33.85ID:77z8520q>このパスを指定してまとめて登録する方法
チョットこの意味が 理解できてないけど
こうゆことしたいの かな?
Set WshNetwork = CreateObject("WScript.Network")
FilePass = "C:\Documents and Settings\" & WshNetwork.UserName & _
"\Application Data\Microsoft\Excel\XLSTART\PERSONAL.XLS"
0168デフォルトの名無しさん
2014/11/18(火) 18:41:11.21ID:+Ns0XI27PCのユーザーアカウント名が前のPCと違っていると
ユーザー設定>マクロボタン右クリ>マクロの登録
で、全てのマクロを再登録しなければならない
元のPC
C:\Documents and Settings\UserORG\Application Data\Microsoft\Excel\XLSTART\PERSONAL.XLS
コピーしたいPC
C:\Documents and Settings\UserCOPY\Application Data\Microsoft\Excel\XLSTART\PERSONAL.XLS
とすると、パスのUserORGとUserCOPYの違いによって、そのままではマクロボタンを押しても該当無しとなるので
ユーザー設定で再登録が必要となるが、マクロの数が50超あるので非常にめんどくさい
テキストファイルか何かでパスをUserORG→UserCOPYと書き換えて、再登録の手間無しでざっくりコピーしたい
0169デフォルトの名無しさん
2014/11/18(火) 21:11:45.86ID:psSLzE7H0170デフォルトの名無しさん
2014/11/18(火) 21:25:32.61ID:TpYwnXIk上でExcel11.xlbって書いてるからもしかすると2003とかか知らんが、昔っからコピーでいけてるぞ? 相手側のセキュリティなら
これはこうしてくれ って伝えればいいだけじゃないのか? アカウント名の違いでマクロが動かなかったなんて一度も無いんだが?
だれかおれの間違いを指摘してくれ
0171デフォルトの名無しさん
2014/11/18(火) 22:15:29.69ID:lKmKVG14コピー先のマシンにUserORGフォルダを作ってファイルコピーするのが一番簡単で早い
0172デフォルトの名無しさん
2014/11/18(火) 23:28:04.32ID:WVbEeNksそのスレはもう落ちて見れないのですが。
0173デフォルトの名無しさん
2014/11/18(火) 23:33:04.99ID:YNTCOw/iみられるよ
ただし、書かれているのは正解ではないけど
0174デフォルトの名無しさん
2014/11/19(水) 00:26:35.25ID:IL3ynjUEそこで使われているたくさんの変数名やサブ名や関数名を一括で変更したいときは
なにかいい方法はありますか?
0175デフォルトの名無しさん
2014/11/19(水) 00:32:40.22ID:OpskicxoVB.Netかテキストエディタにコピペして編集
0176デフォルトの名無しさん
2014/11/19(水) 02:15:14.43ID:kucPuHEJ置換じゃダメなの?
一括での意味が判らんがシートにコピペし
変更する語句を配列に入れループさせるコード書けば?
0177デフォルトの名無しさん
2014/11/19(水) 05:05:08.99ID:oXOCRAV5見方とどう間違っているのか教えて
0178デフォルトの名無しさん
2014/11/19(水) 06:06:03.20ID:rIIQXVOIたぶんここじゃね?(専ブラじゃみられん IE等で見るベし)
Excel VBA 質問スレ Part34
http://peace.2ch.net/test/read.cgi/tech/1403911485/594-633
0179デフォルトの名無しさん
2014/11/19(水) 07:12:08.51ID:oXOCRAV5で、この答えを書いたのは俺だが、どこが間違ってるって?
600 デフォルトの名無しさん sage 2014/09/17(水) 14:28:16.96 ID:c1ogrgKw
>>594
多分ファイルのどこかに書いてあるから、ファイル解析して頑張れ、応援してるぞ
http://msdn.microsoft.com/en-us/library/office/cc313105(v=office.12).aspx
0180デフォルトの名無しさん
2014/11/19(水) 07:18:41.22ID:cj3WZnB60182デフォルトの名無しさん
2014/11/19(水) 07:31:49.95ID:I9gi/U1mああ、すまん。
確かにあんたに言うこっちゃなかったな。
0183163
2014/11/19(水) 10:03:15.97ID:IL3ynjUEありがとうございます!
それですね。
ところでふと思ったのですが
その方法だとアクティブになる予定のシートやセルを取得できますが
アクティブになる予定ではない複数のシートのそれぞれのシートをもしアクティブにしたときのその各シートのなるであろうアクティブセルたちは
どうやって取得しますか? (意味が複雑ですが分かる人には意味は分かると思いますが)
0184デフォルトの名無しさん
2014/11/19(水) 10:06:05.83ID:IL3ynjUEそれだと例えば変数が
・Age
・AgeMax
の2つあった場合
AgeだけAge→HowOldと変数名を変えたいばあいに
変えたくないAgeMaxまでHowOldMaxと誤って変えてしまう問題がある。
さらにこの例以外にも問題はたくさん生じると思う。
0185デフォルトの名無しさん
2014/11/19(水) 10:14:32.19ID:ehhdouR6つ「完全に一致する単語だけを〜」
同じ名前の変数が広範囲に出てくるなら、
基本的にはもっと構造化した方がいいと思うが。
0186デフォルトの名無しさん
2014/11/19(水) 10:18:01.31ID:IL3ynjUE>「完全に一致する単語だけを〜」
それでもダメじゃ?
0187デフォルトの名無しさん
2014/11/19(水) 10:40:47.10ID:kucPuHEJAgeMaxを先にすれば良いだけじゃん?
0188178
2014/11/19(水) 10:41:57.63ID:rIIQXVOI紹介した過去すれでも何人かが書いてるけど
君もに問いたい
どうしてセレクトやアクティベートをして取得しないの?
一番 単純で簡単な方法じゃね?
単に 知的 好奇心?
0189デフォルトの名無しさん
2014/11/19(水) 10:46:57.19ID:IL3ynjUE上の>>184で書いた具体例は複雑怪奇な入り組んだコードを
わかりやすく説明するために最高度に洗練して最高潮にシンプル化したもの。
そりゃAgeとAgeMaxだけだったらAgeMaxをまず"TempVariable"にでも置換しといてAgeを置換したあとまた戻せばいい。
しかし実際はこの100万倍も複雑なんだよ。
0191デフォルトの名無しさん
2014/11/19(水) 10:49:38.14ID:IL3ynjUEはい、まず好奇心というのが一番大きいものを占めると思いますよ。
以前はわざわざセレクト/アクティベートにして対象のシート/アドレスを取得してたけど
もっと単純なコードでできる/できそうなことがわかって、
一般にもし複雑なことを簡単に済ますことができるなら今後のコードの可読性/シンプル化のためどんなことでも徹底的にやる、
それがオレのブログラミング哲学ですから。
0192デフォルトの名無しさん
2014/11/19(水) 10:56:10.36ID:IL3ynjUEそういやVBAのエディタってその使い方を解説したサイトや本って全くないね。
0193178
2014/11/19(水) 10:57:34.56ID:rIIQXVOIならこれ以上相手をする気にはなれない。
じゃーーーねwww
0194デフォルトの名無しさん
2014/11/19(水) 10:57:44.78ID:kucPuHEJ礼はいらんが逆切れは勘弁してね
変更する語句は幾つ有るの?
何百あろうと置換するコード作れば済むじゃん
0195デフォルトの名無しさん
2014/11/19(水) 10:58:30.77ID:2H4InUlp> それでもダメじゃ?
なんで駄目なんだ?
「単語」の意味わかってる?
0196デフォルトの名無しさん
2014/11/19(水) 11:00:07.13ID:2H4InUlp> 一般にもし複雑なことを簡単に済ますことができるなら今後のコードの可読性/シンプル化のためどんなことでも徹底的にやる、
アクティブなセルの位置が知りたいシートをSelectするのが複雑なことなんですか?
0198デフォルトの名無しさん
2014/11/19(水) 13:06:18.66ID:efOXW83R変数名とかプロシージャ名だけに限っていえば
名前の前後の半角スペースまで込みで検索、置換すれば
それなりに対応出来ると思う。
ただ、コメント中とか""で括った文字列なんかも含めて考えると
その限りではないから何らかの配慮が必要になるのは間違いない。
0199デフォルトの名無しさん
2014/11/19(水) 13:32:39.89ID:2H4InUlp0200デフォルトの名無しさん
2014/11/19(水) 13:40:59.38ID:J0idNhiA百万倍複雑で置換も出来ないような本格的()クソコード書いてんのに、
なんでそんなに上から目線なの。
0201デフォルトの名無しさん
2014/11/19(水) 15:09:20.35ID:4iVxD8npマクロボタンはユーザーアカウントを含んだパスで指定されるから
ユーザーアカウントの違うマシンにインポートしただけでは
マクロボタンをクリックしてもオリジナルのパスを呼び出すことになり
該当するマクロがないと言われる
マシンが変わってもマクロ自体は問題なく働くけど
カスタマイズしたツールバーのマクロボタンを使うには
マクロボタンのパスを再登録して
新しいマシンのユーザーアカウントにあるパスで再登録しなければいけない
その一手間がマクロの数が多いと煩雑になりすぎるので
テキストベースで一括処理できないのかと
0202デフォルトの名無しさん
2014/11/19(水) 15:17:12.40ID:2H4InUlp> その一手間がマクロの数が多いと煩雑になりすぎるので
だったら、配布予定のものは、アドインにしとけよ。
いつまでやってんだ。
0203デフォルトの名無しさん
2014/11/19(水) 16:02:26.94ID:kucPuHEJ0204デフォルトの名無しさん
2014/11/19(水) 16:47:25.67ID:2H4InUlpそう。
アドインを知らなかったか、アドインを簡単に作れることを知らなかったんじゃないかと思うよ。
0205デフォルトの名無しさん
2014/11/19(水) 17:17:00.60ID:kucPuHEJ「個人用マクロブック」と「フォームのボタン」の最悪組合せか
何を騒いでるのかやっと判った
0206デフォルトの名無しさん
2014/11/19(水) 17:23:50.18ID:4iVxD8npサンキューです
アドインなんて使ったこと無かったけど、こんな簡単な機能があったわけですね
スコーンと解決しましたw
余りにも不自由なので、何かそう言う機能があるのではとは思っていたのですが
まさに知りたかったことズバリです
VBAもマクロも全て独学、周りにマクロを使っている人も居らず
不便に思うたびに何か手はないかと思って知識を追加してきたもので
ほんと感謝です
0207デフォルトの名無しさん
2014/11/19(水) 21:37:21.37ID:Opskicxoまともなエディタなら「単語の置換」という機能がある
部分一致では別の単語と見なされるから問題なく置換できる
置換リストを用意して複数の単語を一気に置換できるエディタもある
0208デフォルトの名無しさん
2014/11/19(水) 22:02:26.33ID:F+S/dSwhだから、文字列中に変数名が紛れ込んでたりとかどうすんの?って話じゃないの?
0209デフォルトの名無しさん
2014/11/19(水) 22:44:48.20ID:Opskicxo正規表現でダブルクォートの数と位置をチェックすればリテラルの中と外を区別できる
sedでも可
100万倍複雑なコードを書くようなやつなら、それぐらい普通にできるだろ
0210デフォルトの名無しさん
2014/11/19(水) 23:06:51.43ID:oXOCRAV5当然ダブルクォート内のダブルクォートにも対応するんだよね
0211デフォルトの名無しさん
2014/11/19(水) 23:26:30.89ID:F+S/dSwh結局、正規表現頼みかよ
単語の置換はどうしたw
0212デフォルトの名無しさん
2014/11/20(木) 00:07:40.09ID:dmOrDYsbVBEの機能も把握してないようなやつの無茶な要求に応えられる現実的なアイデアってそんなにないだろ
そもそも文字列中に変数名が含まれるなんて条件も質問者じゃない他人の勝手な後付けだし
0213デフォルトの名無しさん
2014/11/20(木) 01:04:49.89ID:YcqpqC9x本格的なコードが何行あるのか知らんけど(鼻ほじ
0214デフォルトの名無しさん
2014/11/20(木) 01:43:49.93ID:I9gdCKy5コメントだろうとダブルクォート内のダブルクォートでも何の問題も無くVBAで出来る
既出じゃん
0215デフォルトの名無しさん
2014/11/20(木) 23:15:50.11ID:cPSqvK00患者情報を打ち込むと自動的にエクセルが起動し
血液検査やレントゲンなどその日に回るべき部署が明記された
ワークシートを自動作成したのちに印刷して
印刷が終わるとそのシートを自動で閉じるということをやってて
高度なことしてんなーと感動したんですが、このスレだと
もっと凄いことができる人がいるんでしょうか?
0216デフォルトの名無しさん
2014/11/20(木) 23:37:48.98ID:kSKt8q0fもちろんです。
もし患者が医療事故で死亡してしまった場合
それまでのデータを改ざんしてその事故を隠ぺいしてしまう機能も作っています。
0217デフォルトの名無しさん
2014/11/21(金) 07:16:13.04ID:aKgy5iW0多分ね。
ただ、他のアプリからってところで、Excel操作のために使ったブックやシート、レンジとかの
解放をしておかないと掴みっ放しになるので、それだけ注意するくらいかな。
後は仕様が実現可能な範囲ならどうにでもなる。
0218デフォルトの名無しさん
2014/11/21(金) 09:04:39.80ID:+vQ/ho/7スマートにやるならアプリを経由せずにオブジェクトを直接操作する
0219デフォルトの名無しさん
2014/11/21(金) 23:03:47.29ID:q0/pK+mw言ってる意味がまったく分からないけど頑張ってね
0220デフォルトの名無しさん
2014/11/21(金) 23:31:36.94ID:8nypL9of0221デフォルトの名無しさん
2014/11/22(土) 09:15:33.42ID:kgS6Bnd+元からExcelブック上にあるわけではないデータを一覧表示や印刷する程度で
Excel(インスタンス、オブジェクトも含めて)に頼ってる時点で技術的には下の下だよ
コスパで言ったら、Excelに限らず既に導入されてる既製ソフトに頼れる部分は頼った方が
製作コストを抑えることは出来るから方法論としてはアリだし、俺も自分で使うアプリや
会社の部署内だけで扱うアプリは、暇なときにササッと作って、それによって多少でも
仕事の効率が改善されれば良しって感じなので、手抜きでExcelと連携する方式にすることは多いけど、
高度というか技術的に上を見るなら、電子カルテ側に一覧表示や印刷機能を組み込むのが望ましい
0222デフォルトの名無しさん
2014/11/22(土) 09:45:53.98ID:omhlNf/qもしそうするならプログラミング言語はなにになるの?
電子カルテを作ってるプログラミング言語のソースが見れないときはどうする?
0223デフォルトの名無しさん
2014/11/22(土) 10:16:31.34ID:tLc6zRT60224デフォルトの名無しさん
2014/11/22(土) 10:34:23.66ID:mDanNJyPそうか。では完全にスレチだからそれ用のスレ立てるか見つけるかしてそっちでやってくれな
0225デフォルトの名無しさん
2014/11/22(土) 10:45:05.53ID:kgS6Bnd+今回は電子カルテの動作が高度なのかとか、もっと良い方法あるかって話で
電子カルテを作る上での話、つまりはソースを弄れる次元での話だったから>>221のように書いただけ
電子カルテ側を弄れない場合は、SendMessageとか、フックして横取りとか、
電子カルテ側の保存データを解析とか、いろいろアプローチはあるが、
方法論としてVBA以外の手段を提示するところまではスレ違いじゃないけど
VBA以外の手段の具体策を語りすぎるとスレ違いになるので、詳しくは控える
>>223
VBAだけではなくアプリ開発やってる奴から見たら、当たり前のことしか書いてないのに
それが自慢みたいに見えてしまうのは、君のレベルが低いからだよ
「30代で年収400万です」だって、一般社会的には「ぼちぼちか」程度で自慢にもならないが
派遣や底辺業からしたら自慢に見えちゃうのと同じ事
普通は自慢に見えないものが、自慢かのように見えてしまうのは、自分の目線が低いからだと気付こう
0226デフォルトの名無しさん
2014/11/22(土) 10:54:55.62ID:omhlNf/qそれとも要素数を気にしないで使えるもっと高級な技を使ったほうがいいですか?(その場合なにを使うのが一般的でしょうか?)
0227デフォルトの名無しさん
2014/11/22(土) 11:12:09.12ID:tLc6zRT6プリンタは機種やドライバによって挙動が異なることが多い
システム納入でプリンタを決め打ちできるならいいけど、既存のシステムに組み入れられてどんなプリンタ繋がるかわからないなら、印刷を Excel に任せてしまうのは普通にある
まあ、実務やったことないガキにはわからんだろうけどな w
0228デフォルトの名無しさん
2014/11/22(土) 12:10:49.37ID:JtamyZlr>要素数を気にしないで使えるもっと高級な技
なんですか、それ。
動作が遅くなるとかなんて考えたこともない。それが必要だから使っているだけであって。
要素数固定で不必要なメモリ確保(あるいは必要な分確保できず)なんかよりはるかに良いでしょ
0229デフォルトの名無しさん
2014/11/22(土) 12:11:20.25ID:mDanNJyPはいはい、早く消えてね。
にしても年収安っ
0230デフォルトの名無しさん
2014/11/22(土) 12:33:28.06ID:tMRajCg5例えばCSVを行単位で配列に読み込む場合、ReDimで拡張しながら読み込むのと、行数判定ループ=>ReDim=>読み込みって方法がある。
後者の方が速いんじゃないかなぁ
0231デフォルトの名無しさん
2014/11/22(土) 12:40:03.26ID:omhlNf/qCollectionとかDeictionaryとかいろいろあるみたいですよ。
あまり使い方は知らんが。
0232デフォルトの名無しさん
2014/11/22(土) 13:52:45.20ID:kgS6Bnd+印刷設定への柔軟性の持たせ方も知らないの?
>>229
400万は俺の年収ではなく、単に平均年収当たりを例として挙げただけだが?
まったく、この子ら、どんだけコンプレックス抱えてるんだよw
0233デフォルトの名無しさん
2014/11/22(土) 13:53:26.32ID:Bqi+3jhpそうとも限らない。
CSVが大量にあり、最初に全ての行数判定ループ=>ReDim=>読み込みと
ReDimで拡張しながらと。
0234デフォルトの名無しさん
2014/11/22(土) 14:15:26.52ID:UMO5H3JKケースバイケース
CSV がネットワークの先にあるとかもあるから
そもそも VBA レベルならそんなことを気にせずに組みやすい方法で組めばいいと思う
気になるほどでかいデータなら SQL-Server に読み込んで処理するとかすることもできるし
>>232
> 印刷設定への柔軟性の持たせ方も知らないの?
そういうレベルの話じゃないよ w
普通に印刷すると極細の罫線が印刷されないとか、まあ経験ないだろうし、バッドノウハウの類いだから知らなくていいよ
0235デフォルトの名無しさん
2014/11/22(土) 14:26:54.91ID:Ka6CKXnZなるほど、もっと安いのか。
偉そうに言ってるわりにチンケな人生送ってそうだな。
0236デフォルトの名無しさん
2014/11/22(土) 15:15:26.86ID:tMRajCg5メモリに余裕があれば1度目でキャッシュに入る可能性高くね?
>>234
ケースバイケースだからこそケースを絞って紹介したんだぞ
それにDBとか飛躍しすぎ
0237デフォルトの名無しさん
2014/11/22(土) 15:35:10.24ID:Ka6CKXnZ0238デフォルトの名無しさん
2014/11/22(土) 16:11:47.54ID:tLc6zRT6> ケースバイケースだからこそケースを絞って紹介したんだぞ
絞れてないだろ?
どこが絞れてないかも書いてあるのに何を言ってるんだよ w
0239デフォルトの名無しさん
2014/11/22(土) 16:19:47.03ID:O6lQ0Rak0240デフォルトの名無しさん
2014/11/22(土) 18:45:35.55ID:vg7E1raR普通のReDimだけならそれほど気にすることはない
大概はPreserve付きで使うだろうけど、この場合は遅いからなるべくやるなと言われてる
たとえばループで毎回1づつ大きくするんじゃなくて、ある程度まとめて大きくする方法を考える
VBA単体だとコレクション系は弱いから、配列の代用はケースバイケースだな
とはいえ、最近のPCの性能ならあんまり気にすることも無いかもしれんのが実情
0241デフォルトの名無しさん
2014/11/22(土) 19:39:47.06ID:9VkaRl4yWorkbooks("1.xls").Sheets("Sheet1").Range("a1").Value = Workbooks("2.xls").Sheets("Sheet1").Range("a2").Value
はブック1からブック2へセルa1の値をコピペするコードですが
セルa1の値に100を掛けた数値をブック2へペーストするにはどう書き足せばいいのでしょうか?
0242デフォルトの名無しさん
2014/11/22(土) 19:50:03.97ID:vg7E1raRコピーの向きが逆じゃないか?
セルが数字じゃなかったりしたらとか考慮点はあるけど
とりあえず後ろに * 100とか付けたしとけば
0243デフォルトの名無しさん
2014/11/22(土) 20:28:06.59ID:9VkaRl4y逆でした。 そして式の最後に書き足すとすんなりとうまくいきました。
ありがとうございました。
0244デフォルトの名無しさん
2014/11/23(日) 00:35:46.18ID:HclhhaC80245デフォルトの名無しさん
2014/11/23(日) 10:03:37.04ID:pl8PYAOzお前は >>230 から読み直せよ
0246デフォルトの名無しさん
2014/11/23(日) 10:20:47.40ID:Q4U7BP0Wあまり細かいこと気にしてるとバカになるぞ
0247デフォルトの名無しさん
2014/11/23(日) 19:09:25.87ID:Rton4PFq最初にある程度の領域を確保する場合、
領域が足りてるかの確認、足りなかったら結局redim preserveするんでしょ?
あと、余った領域はどうすんの?
最後にredimして削るの?
0248デフォルトの名無しさん
2014/11/23(日) 19:17:06.72ID:pqCOOKCL0249デフォルトの名無しさん
2014/11/23(日) 19:59:33.33ID:Rton4PFqubound(array)するときにめんどくさくね?
0250デフォルトの名無しさん
2014/11/23(日) 20:04:51.10ID:HclhhaC8ないならregexpで改行の数を取るとかしてさ
0251デフォルトの名無しさん
2014/11/24(月) 04:10:26.16ID:JDFV6yz/昔はPreserveすると結構遅かったからな
足りないかチェックして、100とかずつ増やして、最後に余った分削るとかやってた事もある
まあ、毎回ReDimして速度が気にならないならそれでいいんじゃね
0252デフォルトの名無しさん
2014/11/24(月) 06:58:09.08ID:owm7UG/9もう、accessとか使えってレベル。
逃げてー。
0253デフォルトの名無しさん
2014/11/24(月) 07:38:48.19ID:F5zqJ0Hgわざと遅くて使い物にならないヤツ組んでやれば?
0254デフォルトの名無しさん
2014/11/24(月) 09:04:58.20ID:/Xnwup+Z0255デフォルトの名無しさん
2014/11/24(月) 09:34:16.29ID:jTeVjYzrType Person
Name As String
Age As Integer
Birthday As Date
Sex As String
Prefecture As String
・
・
End Type
は長いんですがどうにかして1-2行にするためのしくみはありませんかね?こんな感じで↓
Type Person {Name As String, Age As Integer, Birthday As Date, Sex As String, Prefecture As String}
End Type
0256デフォルトの名無しさん
2014/11/24(月) 09:41:25.16ID:jTeVjYzr「ここは何もしないよ」ということを示すのによう方法はあります?
単に空欄にするのは「本当になにもしない」なのか「あとでなにか記入しようとして忘れてるだけ」なのか区別がつかないから却下。
このくらい気をつかうのがオレのプログラム哲学なんでね。
こんなところで使いたい。
Select Case Name
Case "A"
i=i+1
Case "B"
i=i+2
Case "C"
★このときはなにもしないよ★
Case Else
i=i+3
End Select
0257デフォルトの名無しさん
2014/11/24(月) 10:20:55.45ID:XbvFM8cR標準ではない、オレオレプリプロセッサでも作れ
>>256
コメント入れとけよ
0258デフォルトの名無しさん
2014/11/24(月) 10:42:57.02ID:jTeVjYzrオレオレプリプロセッサとは?
>>257
オレはコードへのコメントは否定派なのです。
コードを改変したときコメントも改変しないといけないばかりでなく
重要なのは「改変したとき修正すべきコメントを探してコメントを修正しないといけないから」です。
もう一回言うよ重要だから。
「改変したとき修正すべきコメントを探してコメントを修正しないといけない」んです。
これはものすごい労力ですよ。
UFOがいないことを証明するのと同じくらい。
UFOが存在することを証明するのはもし存在するとしたらそれがあることを実物を出して証明すればいい。
しかし存在しないことの証明は事実上できない。
もしコメントをつけるプログラミングをしていたばあい
本当に修正すべきコメントがもう残ってないか調べないといけない。
これはUFOの非存在の証明と似ていて、もしやるならいままでに書いたコードをすべての行をチェックしないといけない。
0259デフォルトの名無しさん
2014/11/24(月) 10:53:57.57ID:VYWQA4UT0260デフォルトの名無しさん
2014/11/24(月) 10:57:11.01ID:fcfNiHLgコロンでできなかったかな
関数もコロンで一行にできたはずだしタイプでもたぶん
>>256
Do Nothingを使うかな
0261デフォルトの名無しさん
2014/11/24(月) 11:07:15.88ID:D8KRBFf0人に質問してる時点で哲学とか偉そうなこと言うな
本当に哲学を持ってれば質問なんかしない
0262デフォルトの名無しさん
2014/11/24(月) 11:11:14.98ID:/Xnwup+Z> オレオレプリプロセッサとは?
プリプロセッサでぐぐれ
> オレはコードへのコメントは否定派なのです。
> これはUFOの非存在の証明と似ていて、もしやるならいままでに書いたコードをすべての行をチェックしないといけない。
やれよ、お前の苦労なんて知ったこっちゃないわ
0263デフォルトの名無しさん
2014/11/24(月) 11:23:30.83ID:owm7UG/9線形検索でアルゴリズム組んである。
さすがに件数増えると遅い。
エクセルだから仕方ないってことにしてもらおう。
0264デフォルトの名無しさん
2014/11/24(月) 11:54:28.26ID:jTeVjYzrありがとうございます。
コロンで解決しました。
>>260
Do Nothingなんてステートメントないじゃないか。
しかしその貴重な意見を参考に
Private Sub DoNothing()
★
End Sub
をつくりました。
しかし★の部分にはなんと書けばいいの?
0265デフォルトの名無しさん
2014/11/24(月) 11:56:36.45ID:jTeVjYzr循環になってるらしくエラーが出てExcelが強制終了された。
0266デフォルトの名無しさん
2014/11/24(月) 12:10:33.21ID:D8KRBFf0何もしないのなら何も書かない
Sub 〜 End Subだけで終了
0267デフォルトの名無しさん
2014/11/24(月) 12:21:31.49ID:jTeVjYzrコードを例えば1年ぶりに見たとき
もしなにも書いてないと
(1)本当になにも書いていない
(2)当時あとで何か書こうと思ったけどいまだ追加をしていない
(3)誰かがあとで消した
の区別がつかなくないか?
0268デフォルトの名無しさん
2014/11/24(月) 12:24:33.50ID:Eb83DtMA本当に何もしないことを意識して記述するなら、DoNothingとでも
名前を付けた何もしないメソッドを呼び出すようにすればいい。
なぁに、.Netでもデリゲートやインターフェースを使うときにはよくあること。
0269デフォルトの名無しさん
2014/11/24(月) 12:25:16.67ID:jTeVjYzrジッパーを閉めておくべきなのは
あとでサイフをとりだしてなにも入っていなかったとき
本当になにもないことが確信できることだ。
もしジッパーを開けておいたら
コインがサイフから飛び出してバッグの中に入ってる可能性がある。
0270デフォルトの名無しさん
2014/11/24(月) 12:26:47.45ID:jTeVjYzrそのメソッドにはなにを書くの?
0271デフォルトの名無しさん
2014/11/24(月) 12:32:12.86ID:Eb83DtMA基本的になにも書かない。
デリゲートやインターフェースで使うつもりならそのシグネチャと、返値がある場合は正常であることとか、
何もさせていないことを意味することとか。
0272デフォルトの名無しさん
2014/11/24(月) 12:45:35.35ID:2wgV6TLTそもそもそこまで意図させるなら、返値を列挙体でもたせてどういうつもりで
その状態にしていたかを返却するようにしたほうがいいんじゃないの?
そこまで重要視するんならさ。
0273デフォルトの名無しさん
2014/11/24(月) 12:47:32.56ID:D8KRBFf0だーかーらー、忘れないためにコメントを書くんだろうがボケ
コメントを書くのは哲学に反するとか、寝言言ってんじゃないぞコラ
0274デフォルトの名無しさん
2014/11/24(月) 12:52:57.67ID:0v6xJTH4その3つの種類に分けた、何もしない関数を作ればいいじゃん。
関数名ももろそれでw
0275デフォルトの名無しさん
2014/11/24(月) 12:55:29.06ID:fcfNiHLgなにもしなかった事を明示するためにデバッグプリントかな
0276デフォルトの名無しさん
2014/11/24(月) 12:58:44.12ID:Eb83DtMA何がどう哲学なのかもよく分からない人だったなぁ。
0277デフォルトの名無しさん
2014/11/24(月) 13:07:00.89ID:q3t5mPg6惜しいな。'DoNothing v(--)v
0278デフォルトの名無しさん
2014/11/24(月) 13:10:39.78ID:D8KRBFf00279デフォルトの名無しさん
2014/11/24(月) 15:29:46.02ID:sEjXsBJz仮に「何もしないこと」を判別するための手段を用意したとして、
それが書かれていなかったときに
「『何もしないこと』を判別する必要が無かった」からなのか
「『何もしないこと』を判別するのを忘れている」からなのか
が判別出来ない。
0280デフォルトの名無しさん
2014/11/24(月) 17:02:18.09ID:SfsiYp3uテキストボックスに入力しようとすると常に全部上書きするようにしか入力出来なくて困ってます
0281デフォルトの名無しさん
2014/11/24(月) 17:10:55.42ID:5R7rrTlS取得 → 取得文 & 追加文
で良いのでは?
0282デフォルトの名無しさん
2014/11/24(月) 17:19:34.37ID:SfsiYp3uサイト側の仕様のせいか一度に長い文を入力しようとするとエラーが出るんです
だから分割して入力したいんです
0283デフォルトの名無しさん
2014/11/24(月) 18:13:00.38ID:D8KRBFf0文字数チェックとかJavascriptでやってんのかな
cgiを起動するサイトなら、入力フォームを使わずに直接パラメータとして送るとか、あとはSendKeysとか
0284デフォルトの名無しさん
2014/11/24(月) 18:13:15.00ID:ERW6xaby「DLLの中でさらに別のライブラリ(自作)関数」をコールするようにしていると
VBAで実行時「ファイルが見つかりません」というエラーが出ます。
DLL内で別のライブラリ(自作)関数をコールしないようにしてVBAを実行すると問題なく動きます。
(C, C++のコード上でも問題なく動く)
VBAで自作DLLの中でさらに別のDLLを使う場合、何かしらの設定が必要なのでしょうか?
(もしくはDLLを配置する位置の問題?)
0285デフォルトの名無しさん
2014/11/24(月) 18:49:23.70ID:KXz7w2LULoadLibraryの仕様に従って読み込まれるだけのような。
パスが通っていても駄目なの?
0286デフォルトの名無しさん
2014/11/24(月) 18:49:59.30ID:ERW6xabyofficeのrootディレクトリ(C:\Program Files\Microsoft Office 15\root\office15)に置いたら動くようになりました。
しかし分からないのはsystem32フォルダに置いて駄目なのは何故だろう?と。
systemフォルダは間違いなく見に行くと思うのですが…
0287デフォルトの名無しさん
2014/11/24(月) 18:52:03.44ID:ERW6xaby一番上位のDLLのパスを通していても駄目だったんですよ。
そのDLL内部で使っている別DLLのAPIが見えないって感じでした。
0288デフォルトの名無しさん
2014/11/24(月) 18:56:59.50ID:EiENBVLi0289デフォルトの名無しさん
2014/11/24(月) 18:59:44.81ID:ERW6xaby確かに64bitOSのPCなんですけど、systemフォルダにDLLを置いて見えないというのは解せないです。
(ちなみにofficeは32bit版)
excelでDLLを見に行くパスを設定(もしくは現在のパス設定の確認)する方法ってありますかねー
0290デフォルトの名無しさん
2014/11/24(月) 20:00:08.46ID:EiENBVLi0291デフォルトの名無しさん
2014/11/24(月) 20:50:20.43ID:KXz7w2LUパスさえきちんと通っていれば、Excel-DLL1-DLL2ってパターンも正しく呼び出せた。
……DLLを作るのってもう何年ぶりだろう(遠い目
0292デフォルトの名無しさん
2014/11/24(月) 23:18:44.86ID:JDFV6yz/複数の文はコロンでつないで1行に書ける(例外あり)
Type Person: Name As String: Age As Integer: Birthday As Date: Sex As String: Prefecture As String: End Type
これでいけるだろ
こんなコード書メンテしたくないが
0293デフォルトの名無しさん
2014/11/25(火) 00:14:32.40ID:3Xoyl8Hl1行にまとめるのとはちょっと違うけど、型宣言を短縮する方法ならあるよ
「As String」は「$」に、「As Integer」は「%」と書くことができる。ただし「Date」など省略できない型もある
例を書き換えてみると
Type Person
Name$
Age%
Birthday As Date
Sex$
Prefecture$
・
・
End Type
MS-BASICの時代はこう書くのが常識だったんだけど、なぜかVBの時代になってから使われなくなった
やっぱり可読性が落ちるからかな
0294デフォルトの名無しさん
2014/11/25(火) 00:23:16.41ID:iQo6P3SXむかしの純粋なインタプリタなら、ソースのサイズが実行速度に影響したりしたからな
コンパイルするならメリットほとんどない
あと型が増えたら記号が足りないって問題もあるw
0295デフォルトの名無しさん
2014/11/25(火) 07:33:07.76ID:oMA0ONCn有るっつんだったら >>255にききたいけど、可読性を下げてまでするそのメリットは何?
0296デフォルトの名無しさん
2014/11/25(火) 07:56:13.41ID:LghttLz3それが彼のプログラミング哲学www
0297デフォルトの名無しさん
2014/11/25(火) 12:44:38.13ID:8YQh1Q5Iなのでエクセル、ワードと親和性は高いと言えるけど、、、
0298デフォルトの名無しさん
2014/11/25(火) 13:27:45.81ID:JE+Nf7H+Public a as Integer
Private b as Integer
と
UserForm1の上端部で定義した
Public c as Integer
Private d as Integer
の
それぞれ4つの変数a, b, c, dは
その値がクリアされるタイミングはいつですか?
一旦プロシージャの処理が終わって時間待ちになったときにクリアされたりするのでしょうか?
0299デフォルトの名無しさん
2014/11/25(火) 14:25:31.41ID:S6K9qD6w"vba 変数 クリア タイミング"
上位3件
値が消えない静的変数
http://officetanaka.net/excel/vba/variable/10.htm
モジュールレベル変数の値が消えるとき
http://www.moug.net/tech/exvba/0150116.html
[VBA] Public 宣言された変数の有効期間
http://support.microsoft.com/kb/408871/ja
0300デフォルトの名無しさん
2014/11/25(火) 17:36:06.71ID:LghttLz3"$" とか "&" などの型宣言文字はTypeの中では使えないみたい。
ためしにやってみたら
>コンパイルエラー
>Type ブロック内では無効なステートメントです。
っていうエラーが出て使えない。
0301デフォルトの名無しさん
2014/11/25(火) 21:54:27.11ID:l0p/hEoX標準モジュールとかにまとめて記述すりゃすっきりするじゃん?(鼻ほじ
0302デフォルトの名無しさん
2014/11/25(火) 23:09:51.93ID:hi3TB2zi0303デフォルトの名無しさん
2014/11/25(火) 23:59:43.09ID:Vo39ovgAまれによくあるな。
0304デフォルトの名無しさん
2014/11/26(水) 04:48:58.72ID:P66XyNZEエクセル、ワードはActiveXアプリケーションだから、
VBじゃなくてもActiveX対応言語とは全てと親和性は高いよ
だからその親和性は、電子カルテがVBだからではなく、エクセル、ワードが
外部からの操作性、つまりプログラミング言語との親和性が高いように設計されてるからだ
VBとExcelの親和性は、VB言語とExcelのVBA言語の共通性から来てるかのように
錯覚しがちだが、Excel自体はVB系言語で作られてるわけじゃないからねw
まぁ親和性ではなくコードの移植性ってことで言うと、それが高いのは旧VBに限られ
次点のVB.NETでさえ、その点では大きく劣るが、
件のような場合におけるコードの移植性は、一度VBAでコードを書いてからじゃないと、
その処理を外部に持って行けない初心者以外にはあまり関係のない話
0305デフォルトの名無しさん
2014/11/26(水) 09:34:28.90ID:ZQ9DyrUoMacOSやWindowsの基本構造なんだよね
Officeはその基本に忠実に作られてるってだけのこと
個人が作ったフリーウェアなんかでも、この基本をちゃんと押さえた構造になってるアプリなら、簡単に外部から
操作したりデータの再利用ができてしまう
0306デフォルトの名無しさん
2014/11/26(水) 12:29:02.28ID:l6+k0cvMて言うか出せ。
0307デフォルトの名無しさん
2014/11/27(木) 07:09:02.52ID:X3D24wAFこれがVB.NETになったら、かろうじて今VBAを使えてる奴の多くは
VB.NETは解らないってなって、社内で使ってるExcelやAccessのマクロ入りファイルを
作ったりメンテしたり出来る奴が極端に減って、俺の負担は増えるばかり
個人的にはVB.NETでやりたい部分もあるけど、そういうのは先にも出た連携性の良さを活かし
個人の自宅PCでは入れ放題な外部アプリやCOMを使って、VB.NETなりC#なり、あるいは他言語で作った外部アプリから
Excelをオブジェクトとして操作したり、Excelから同じく上位言語で作った自作COMを参照したりで事足りてる
0308デフォルトの名無しさん
2014/11/27(木) 08:28:21.08ID:tn51YXgSVBAはVBAでひとつ、事務の現場として完成された言語だからね。
ここにオタクの思想であれやこれや入れる理由なんてどこにもない。
0309デフォルトの名無しさん
2014/11/27(木) 11:26:25.74ID:5OfvJX0Bデータが有るのだが、それをbook2のsheet1に素早くコピーしたいのだが、
どんなふうにやれば最も速くコピー出来るでしょうか?
0310デフォルトの名無しさん
2014/11/27(木) 11:50:35.83ID:omIZS9ZA単なるシートコピーじゃなくてセル毎に処理走るの前提なら、
一旦CSVに吐き出して読み込むのが早かった気がする
CSV読み込むルーチンは自前で
0311デフォルトの名無しさん
2014/11/27(木) 12:33:10.24ID:HmdQywrO0312デフォルトの名無しさん
2014/11/27(木) 12:54:53.73ID:cuJ5rv8lVBA.NET とか C# for Application がサポートされてもすぐに VBA はなくならんだろ
0313デフォルトの名無しさん
2014/11/27(木) 13:14:29.79ID:yVYX1THhなにが違うんだ?
VBAがある程度できればすぐにVB.NETも使いこなせるようになるだろ
そのVB.NETがどういうものか知らんが
0314デフォルトの名無しさん
2014/11/27(木) 13:26:26.61ID:Sitwz6k+基本的なことはoffice tanakaに聞くといいよ
0315デフォルトの名無しさん
2014/11/27(木) 14:27:50.82ID:yVYX1THhファイルやシートを選択するとき
あらかじめその文字列は取得してたけど
あとで削除したり閉じたりして存在していないときエラー回避のため存在するかどうかを確認するための関数やメソッドはありますか?
0316デフォルトの名無しさん
2014/11/27(木) 14:32:35.47ID:ihRsmIdQデータ形式にも依る
どんなデータで現状はどうやってコピーしてる?
0317デフォルトの名無しさん
2014/11/27(木) 14:45:59.91ID:ihRsmIdQ存在の確認なんてムダだと思うんだが?
エラー起きても良いじゃん
On Error ステートメントじゃダメなの?
0318デフォルトの名無しさん
2014/11/27(木) 15:18:53.28ID:5OfvJX0B主に定数が多い名簿のようなデータです。
現状、マウスでコピペです。
0319デフォルトの名無しさん
2014/11/27(木) 15:37:55.39ID:yVYX1THhOn Errorはなにが原因でエラーになったか不安になるだろ。
コード的にも美しくないし。
アルツハイマーでもこれくらい分かる。
0320デフォルトの名無しさん
2014/11/27(木) 15:42:04.54ID:r+bsdp9/0321デフォルトの名無しさん
2014/11/27(木) 16:08:31.06ID:tn51YXgSエラーコード変数に格納しておけばいいんじゃね?
で、error.logってテキストで吐き出すようにしておくと。
0322デフォルトの名無しさん
2014/11/27(木) 16:15:26.53ID:ihRsmIdQコードが書けないなら現状のマウスでコピペの手順をマクロ記録してみたら?
マウスで範囲選択する代わりに最大行を調べるコードにすれば便利になるよ
>>319
原因は判るでしょ逆に何で判らない?
必要なら「ファイルがありません」等の状況に応じたメッセージ出せるし
オレはエラー処理なしでマトモな動作するコードは書けないと思ってる
必要悪なのは承知してるけど
0323デフォルトの名無しさん
2014/11/27(木) 16:49:02.48ID:mieEo3n5エラー内容はErrオブジェクトの値で判断できるんだから
何が原因でというよりも、
どんな処理を実行しているときにってことが知りたいんだろ?
プロシージャの先頭辺りでただ漠然と
On Error ……
ってやってたらわからないけど、
必要な部分の直前で
On Error ……
を書いて、その部分が終わった直後に
On Error Goto 0
でエラートラップを解除すればエラーを拾う場所は特定できる。
(少なくとも関係ない場所でエラーが出てもトラップされない。)
それでもなお困るとは思えん。
0324318
2014/11/27(木) 18:05:13.50ID:5OfvJX0B数万行のデータを範囲選択して 別ブックにコピペしようと
するとリソース不足って出て失敗する事があります。
VBAなら上手く行きますか?
0325デフォルトの名無しさん
2014/11/27(木) 19:52:27.10ID:HmdQywrO数百行ずつ100回に分けてコピーすりゃうまくいくんでない?
VBAはそういうめんどくさい仕事を自動でやらせるためにある
0326デフォルトの名無しさん
2014/11/27(木) 19:59:47.43ID:omIZS9ZASheets("Sheet1").Copy After:=Workbooks("Book2").Sheets(1)
でダメなの?
範囲選択してリソース不足になるんなら、
同じ処理VBAでやっても同じでしょ
0327デフォルトの名無しさん
2014/11/27(木) 20:01:49.56ID:AF5mtHqXVBAに限定すると
ファイルが存在しているかどうかならDir関数
ただし、Dirで存在を確認したからっといって、そのファイルが必ず開ける保障はないので
どっちにしろエラー処理は必要だが
シートが存在するか調べる関数はたぶんないから、自作するしかない
全部のシートをチェックして一致するかどうか見ればいい
こっちはチェックしたシートが操作できない可能性は低い
0328デフォルトの名無しさん
2014/11/27(木) 20:29:08.49ID:xl4clNplとりあえずまともな継承が使える。
RecordSetの代わりになるDataTableには抽出機能やSort機能がある。
て言うかIenumerableを実装したクラスならLinqを使ってSQLまがいなことが出来る。
マルチスレッドで処理を行ったり、元々API使わなければ出来ないようなことも出来たり、
相当夢が広がりんぐになるよ。
俺は頭悪いから使えるようになるまでかなり時間が掛かってるし、まだ全然理解してないけど、
すぐに使いこなせる自信があるならVBA.Netになった方が絶対恩恵受けられるよ。
0329デフォルトの名無しさん
2014/11/27(木) 20:33:01.66ID:ihRsmIdQ工夫すれば負担をかけない方法は色々ありますよ
>>325氏のように分けるのも効果的だし
ループさせ1行ずつコピーしたり
0330デフォルトの名無しさん
2014/11/28(金) 06:52:52.99ID:62Au/G56頭ごなしにVBA.NETに肯定的なこと言ってる奴も、個人レベルのことしか考えてない視野の狭いバカ
ここまで浸透している業務アプリのマクロ言語となると、切り替えはもちろんだが
追加して選択的に両言語が使えるようにするだけでも大きな混乱を招く
0331デフォルトの名無しさん
2014/11/28(金) 07:02:16.25ID:x9xMvfJn0332デフォルトの名無しさん
2014/11/28(金) 07:37:08.54ID:0L0QhUWo0333デフォルトの名無しさん
2014/11/28(金) 07:37:50.17ID:/lIybkv/その器量があるようには見えないけど
0334デフォルトの名無しさん
2014/11/28(金) 08:16:36.93ID:HA42UZYdそういう恩恵はVBAでは必要とされていない。
0335デフォルトの名無しさん
2014/11/28(金) 08:41:37.51ID:GUHvCaBA0336デフォルトの名無しさん
2014/11/28(金) 12:10:16.25ID:/lIybkv/マルチスレッドは一番難しいかも
複数のセルを同時に変更したらどうするのかとか、計算式の結果の格納とセルの変更が競合したらどうするとか考えないといけない
まあ、実装はなんとかなると思うけど、VBA オンリーの人だと色々トラブルだろうな
0337デフォルトの名無しさん
2014/11/28(金) 12:31:21.63ID:olxTTeEH> 複数のセルを同時に変更したらどうするのかとか、計算式の結果の格納とセルの変更が競合したらどうするとか考えないといけない
普通は、UIスレッドからのみUIを操作できるってパターンだけど、その縛りがあるとVBAで
スレッド使う意味がかなり限定されるな。
0338デフォルトの名無しさん
2014/11/28(金) 18:28:17.67ID:GUHvCaBAせめてユーザー定義関数だけでも・・・
0339デフォルトの名無しさん
2014/11/28(金) 18:43:28.76ID:C1hXI+5qその場合は
マルチスレッドでの競合意識したユーザ定義関数にする必要があるんだが
けっこう敷居高いぞ、それ
0340デフォルトの名無しさん
2014/11/28(金) 19:17:15.24ID:GUHvCaBA競合は無いね
0341デフォルトの名無しさん
2014/11/28(金) 20:00:19.00ID:6eiFFNy/何に使うの
0342デフォルトの名無しさん
2014/11/28(金) 20:42:10.06ID:GUHvCaBA0343デフォルトの名無しさん
2014/11/28(金) 21:55:30.18ID:/lIybkv/いいか悪いかはべつにして、普通にグローバル変数使えるし
0344318
2014/11/28(金) 22:01:59.06ID:CY3skMeN思う事は有るなあ。
0345デフォルトの名無しさん
2014/11/28(金) 22:44:55.00ID:MA7LQcixマウスでコピペしてるのに?
笑わせるなw
0346デフォルトの名無しさん
2014/11/29(土) 08:10:36.79ID:MLVwofmR多分多くの企業は有料のMS Officeやめて無料のLibreOfficeとかに移ると思うけど
今まで有料でもMS Office使ってたのはVBA資産があったからだし
0347デフォルトの名無しさん
2014/11/29(土) 09:02:36.27ID:IDbtpam7あの時はコンバートがバカだの使いものにならないだのボロクソに言われてたから、もう少し頭のいいやつにして。
無料の奴はサポート付くか分からないし、セキュリティの問題もある。
0348デフォルトの名無しさん
2014/11/29(土) 11:56:16.85ID:dW+5zpcN多分こいつは Excel 2007 でグラフ回りが結構変更されたことも知らないんだろうな
0349デフォルトの名無しさん
2014/11/29(土) 16:46:46.97ID:yS7vjpndおまえが「もう少し頭のいいやつ」になるのが先じゃね?w
自分(VB.NETが使える奴)だけの狭い視野で考えると、そういう結論に至りやすいが
問題は旧VB系の言語しか使えない奴等への救済措置
旧VB系からVB.NET系への変換は、変換機能がマシになれば問題ないが
VB.NET系から旧VB系への変換は、変換不可能な部分(機能、命令)があるので
そうなると、「VB.NET系から旧VB系へ変換して編集、またVB.NET系に変換して実行や保存」
ってことは出来ないことになるので、旧VB系の状態でないと編集できない奴等は手を出せなくなる
引きこもって、自分のパソコンも自分の作ったファイルも自分しか使わないって環境にいると
そういう配慮まで気が回るような頭が育たないのかも知れないが、実社会では
バカへの救済措置を用意して上手くバカを働かせないと、自分がというか出来る奴ばかりが苦労することになるからね
0350デフォルトの名無しさん
2014/11/29(土) 17:33:49.44ID:qtB00H10お前より頭が悪いやつはそうそう居ないから安心しろw
0351デフォルトの名無しさん
2014/11/29(土) 17:46:17.64ID:A9a31mA5上から目線のバカ w
0352デフォルトの名無しさん
2014/11/29(土) 18:04:17.37ID:8i/Dd6Cf業務システムでVBAを使ってグラフを操作してる企業の割合
その変更に伴うシステム改修の労力
これらがVBA→VB.NETへの移行問題と同列視して語るべき内容とはとても思えないけど
0353デフォルトの名無しさん
2014/11/29(土) 18:54:51.52ID:A9a31mA5だから、知らないなら黙ってろって
0354デフォルトの名無しさん
2014/11/29(土) 20:33:44.77ID:IDbtpam7平たく言うと勉強したくないと言うことね。
そちらが言う通り、もっとグローバルな目で見ると企業なら.Netへの移行は新しい仕事を生み出すから、
それだけお金が廻るようになるし、お金がない企業は元のVBAを使い続けるだけのことになる。
そちらこそ、自分個人のパソコンとか随分視野が狭いんじゃない?
VB.Net→VBに戻すとか言ってるけど、VBのは元々あるんだから変換の必要なんかないよね。
手が出せなくなるなら、手が出せるように勉強すればいいじゃない。
ここにはN-Basic系から構造化言語のVBに来た人だっているでしょ?同じことだよ。
何だかんだといちゃもん付けてるけど、
要は自分が勉強したくないから救済して欲しいと言ってるようにしか見えないよ。
0355デフォルトの名無しさん
2014/11/29(土) 22:06:50.01ID:FQc4stZT>VB.NET系から旧VB系への変換は、変換不可能な部分(機能、命令)があるので
>そうなると、「VB.NET系から旧VB系へ変換して編集、またVB.NET系に変換して実行や保存」
>ってことは出来ないことになるので、旧VB系の状態でないと編集できない奴等は手を出せなくなる
よく知らないなら喋らない方がいいよ。
0356デフォルトの名無しさん
2014/11/30(日) 00:29:31.03ID:KCUjo1S/的外れな指摘で恥かいたからって逃げてんじゃねーよ池沼w
0357デフォルトの名無しさん
2014/11/30(日) 04:40:09.06ID:e750u2fd×平たく言うと勉強したくないと言うことね。
○自分は既にVB.NET使ってるから問題ないが、周りが勉強してくれないから困る
0358デフォルトの名無しさん
2014/11/30(日) 07:02:20.05ID:OJevsDrZ周りって何?.Net知らない人が.Net対応するの?
対応メンバー選抜する時に最初から.Netやる気のない人外せば済む話なんじゃないの?
何でそれがExcelが.Net化して欲しくない話に繋がるのか分からない。
.Netやる気のない人は旧VBAのまま使い続ければいいだけじゃない。
周りの人のせいにしちゃダメだよ。
0359デフォルトの名無しさん
2014/11/30(日) 07:14:15.76ID:B2VgLsUL0360デフォルトの名無しさん
2014/11/30(日) 07:40:06.09ID:OJevsDrZ個人的には余り使うのは好きじゃないけどね。
理由はVBがN-Basicの互換性のためにアポストロフィの代わりREMでコメントが書けちゃったり、
GOSUBが使えて増長なコードでも許されちゃったりするのと同じ。
.NetでもまだGoto分が使えるけど、まず使わないし使ったこともない。
0361デフォルトの名無しさん
2014/11/30(日) 08:03:37.04ID:t4/3aPOfはあ、使ってないから知らないんだろ?
その時結構書き直しが発生してるのに、Libre に移るとかアホすぎだろ w
0362デフォルトの名無しさん
2014/11/30(日) 14:39:34.47ID:NJ4/BTsa>>352を100回読めよ池沼w
2003→2007への移行対応なら何度もやったわw
0363デフォルトの名無しさん
2014/11/30(日) 14:59:49.29ID:v5kZpHtK何回やってもアホはアホのまま w
>>352 に Libre 関係ないしな
0364デフォルトの名無しさん
2014/11/30(日) 16:16:44.13ID:NJ4/BTsa>>>352 に Libre 関係ないしな
いくらなんでも読解力無さすぎだろお前
0365デフォルトの名無しさん
2014/11/30(日) 16:45:50.41ID:2Rbrido6ごめんね、アホの言うことまで理解する気はない
なので、いちいち説明しなくていいからね、どうせ言い訳かこじつけだろうしな w
0366デフォルトの名無しさん
2014/11/30(日) 17:21:01.00ID:Z3WHdujO2003→2007の変更と今回の論点は全然次元が違うという単純なことすら理解できないアスペは大変だなw
もしくは途中で気付いて恥ずかしくなったからごまかしてるのかw
0367デフォルトの名無しさん
2014/11/30(日) 17:53:35.79ID:+efjZbrT0368デフォルトの名無しさん
2014/11/30(日) 19:17:03.33ID:CJTIqzdjで、Libre はどうしたんだよ w
0369デフォルトの名無しさん
2014/12/01(月) 20:17:26.06ID:ykcKtApb0370デフォルトの名無しさん
2014/12/03(水) 23:57:30.22ID:ySBhQlBvhttp://vbae.odyssey-com.co.jp/index.html
0371デフォルトの名無しさん
2014/12/04(木) 02:07:30.44ID:OvWei3Mc就職で有利になるとか期待するな
0372デフォルトの名無しさん
2014/12/04(木) 08:15:12.88ID:wTkc/yZHないよ。
むしろ、下手に取ると君が困ることになると思うよw
プログラミングの世界なんて実力オンリーの世界だから。こんなもの取っても
実力ある事の裏付けにはならんからね。他の糞みたいなPC関連資格全般に
言えるがね。
0373デフォルトの名無しさん
2014/12/04(木) 08:56:02.35ID:WjQOLJdFあったとしても「使えます」って言うだけでOKだろうから、まあ実用性はゼロだな
0374デフォルトの名無しさん
2014/12/04(木) 10:04:06.15ID:mUaAsPlW『シート「条件指定」のD11〜19に書かれている番号にあてはまる顧客情報を、シート「住所録」から抽出する』
ということをさせたいのですが、矢印の部分が違うらしく、動作しません ここからどうすればよいのでしょうか
Sub ラベル印刷()
Dim 業種 As String
Dim 職種 As String
Dim 都道府県 As String
Dim 番号 As String
(略)
業種 = Worksheets("条件指定").Range("D5").Value
職種 = Worksheets("条件指定").Range("D7").Value
都道府県 = Worksheets("条件指定").Range("D9").Value
番号 = Worksheets("条件指定").Range("D11:D19").Value ←
With Worksheets("住所録").Range("A1").CurrentRegion
項目セル数 = .Columns.Count
If 業種 <> "" Then
.AutoFilter Field:=11, Criteria1:=業種
End If
If 職種 <> "" Then
.AutoFilter Field:=12, Criteria1:=職種
End If
If 都道府県 <> "" Then
.AutoFilter Field:=3, Criteria1:=都道府県 & "*"
End If
If 番号 <> "" Then
.AutoFilter Field:=1, Criteria1:=番号
End If
Set 抽出データ = .SpecialCells(xlVisible)
End With
(文字数制限のため以下略)
0375デフォルトの名無しさん
2014/12/04(木) 10:21:37.97ID:WZ0IBH7+Dim 番号 As String
↓
Dim 番号 As Variant
で動くかもしんない、だめかもしんない
0376デフォルトの名無しさん
2014/12/04(木) 10:33:57.98ID:mUaAsPlW出来ませんでした…
If 番号 <> "" Then
の所で引っかかります
0377デフォルトの名無しさん
2014/12/04(木) 11:00:10.97ID:WZ0IBH7+If 番号 <> "" Then
↓
If 番号(1) <> "" Then
とかかなぁ、
それかいっそのこと、このIfなくしちゃうとか。(もちろん対応するEnd Ifも消す)
あと、使ってるExcelのバージョン教えてくれ
このコードもしかすると2007以降でしか動かないかもしんない。
0378デフォルトの名無しさん
2014/12/04(木) 11:06:12.62ID:WjQOLJdFとりあえずエラーが出ないように直してみたが、これで正解かどうかは保証しない
番号 = Join([TRANSPOSE(条件指定!D11:D19)], "") ←
0379デフォルトの名無しさん
2014/12/04(木) 11:14:24.13ID:mUaAsPlW番号(1)にしても駄目でした
番号関連のIfは依頼主が「いちいち他人の住所や職種なんて覚えてられないから付けてくれ」といって付けたものなので外せないものなんです
住所録に同じ苗字の人もいるので…
Excelのバージョンは2013です
0380デフォルトの名無しさん
2014/12/04(木) 11:23:25.27ID:mUaAsPlW動きましたが、1と3を入力したら顧客番号13の人が出てきたり、
同じように1と3と5を入力したら出てこない といったようになってしまいます
0381デフォルトの名無しさん
2014/12/04(木) 11:28:44.58ID:WZ0IBH7+いや、ためしにIf抜いてみて、それで動けばそこから次に進めるかなと、
まずは動くようにしてから修正するのもひとつの手だよね。
あと、どうだめなのかエラーメッセージそのまま書いてくれない?
0382デフォルトの名無しさん
2014/12/04(木) 11:40:34.32ID:WjQOLJdFオートフィルターは条件を2つしか指定できないけど、3人以上入力した時はどうするつもり?
0383デフォルトの名無しさん
2014/12/04(木) 11:41:58.28ID:mUaAsPlWおっしゃる通りです 申し訳ありません
エラーメッセージですね
最初>>374の時には「実行時エラー '13': 型が一致しません。」
>>375も「実行時エラー '13': 型が一致しません。」
>>377の時は「実行時エラー '9': インデックスが有効範囲にありません。」
と出ました
0384デフォルトの名無しさん
2014/12/04(木) 11:42:27.73ID:WjQOLJdFじゃあ、これは?
番号 = Join([TRANSPOSE(条件指定!D11:D19)], ",") '←
最終的に何がやりたいのか、(略)のところで何やってるかわからないと、正解はなかなか出てこない気がする
0385デフォルトの名無しさん
2014/12/04(木) 11:44:25.60ID:WjQOLJdF文字列型変数に配列(セル範囲)を代入してるんだからエラーになるのは当然だろ
いちいちエラーメッセージ見なくてもそれぐらいわかれよ
0386デフォルトの名無しさん
2014/12/04(木) 11:47:40.74ID:mUaAsPlWオートフィルターは条件を2つしか指定できないということを忘れていました…
それ以外の方法がいいんですね
0387デフォルトの名無しさん
2014/12/04(木) 11:50:43.25ID:IvoRpalYExcel2007以上なら これでいい気がする
(確かめてないので動かんかったらゴメン)
If Join(番号) <> "" Then
.AutoFilter Field:=1, Criteria1:=番号 , Operator:=xlFilterValues
End If
参考
オートフィルタを使い倒す
http://officetanaka.net/excel/vba/tips/tips155.htm
Join関数
http://officetanaka.net/excel/vba/function/Join.htm
0388デフォルトの名無しさん
2014/12/04(木) 11:54:42.41ID:mUaAsPlW「顧客名簿」のシートから条件を満たす情報を抽出し、「印刷名簿」のシートにコピー
その後「ラベル」のシートを新たに作成し、その「ラベル」のシートに「印刷名簿」にある情報を住所など必要なものだけ取り出して貼り付ける
…というマクロを組みたいのです
0389デフォルトの名無しさん
2014/12/04(木) 11:57:24.50ID:mUaAsPlW書き忘れていました
番号関連のIfを外せば動きます
0390デフォルトの名無しさん
2014/12/04(木) 12:02:31.63ID:mUaAsPlW番号 = Join([TRANSPOSE(条件指定!D11:D19)], ",")
と書き換えてみたところ、条件に合致する情報がないと出てしまいました
(抽出できる情報が0のときこう出るようにしてあります)
0391デフォルトの名無しさん
2014/12/04(木) 12:05:47.30ID:udPHhaEX0392デフォルトの名無しさん
2014/12/04(木) 12:43:17.07ID:mUaAsPlW「構文エラー」と出てしまいました
番号 = Worksheets("条件指定").Range.("D11:D19").Value
のところが赤くなってしまいます
0393デフォルトの名無しさん
2014/12/04(木) 12:48:51.47ID:/ICVjWXdでよくね?
0394デフォルトの名無しさん
2014/12/04(木) 12:56:38.08ID:mUaAsPlW申し訳ありません Range の後に. 入れてました
修正して試してみましたが型が一致しないと出てしまいました
0395デフォルトの名無しさん
2014/12/04(木) 13:00:14.72ID:hhBXBLyIExcel 買い直せよ
0396デフォルトの名無しさん
2014/12/04(木) 13:07:22.45ID:IvoRpalYDim 番号 As Variant
かな?
0398デフォルトの名無しさん
2014/12/04(木) 13:13:40.53ID:mUaAsPlW試してみましたが
If 番号 <> "" Then
のところで引っかかってしまいます
0399デフォルトの名無しさん
2014/12/04(木) 13:24:57.25ID:WZ0IBH7+え?
もしかして
Dim 番号 As Stringでやってたの?
>>375でも書いたじゃんか
Dim 番号 as Variant はこのコードの書き方だと絶対に外せない大前提だよ。
Variant型なら配列で宣言しなくてもOKだけど
String型で宣言するなら配列変数として宣言しなきゃダメ
そうじゃないとRange.("D11:D19")の範囲の値を格納出来ないよ。
0400デフォルトの名無しさん
2014/12/04(木) 13:27:24.81ID:mUaAsPlWあ、なるほど
修正して試してみましたが、「プロシージャの呼び出し、または引数が不正です」
と出てしまいました
If Join(番号) <> "" Then
の所で引っかかってしまいます
0401デフォルトの名無しさん
2014/12/04(木) 13:31:12.79ID:Xbcc7r/Aオートフィルターの部分、自動記録で試してみたけど数値ではダメみたいですね。
ActiveSheet.Range("$A$1:$D$16").AutoFilter Field:=1, Criteria1:=Array("1", "3", "5"), Operator:=xlFilterValues
のように記録されました。ためしにVariant変数aryに ary = Array("1", "3", "5") とセットし、
〜 Criteria1:=ary 〜
とすれば同じようにフィルターがかかるものの、 ary = Array(1, 3, 5) で〜 Criteria1:=ary 〜
とやっても、該当なしの状態になってしまいました。
条件を記録したセル範囲D11:D19の9個の値をひとつずつ調べ、数値ならば配列に「文字として」
加えるというややこしいことをする必要があると思います。
0402デフォルトの名無しさん
2014/12/04(木) 13:31:29.36ID:WjQOLJdFうちは2010だけど、2013だと増えてるの?
0403デフォルトの名無しさん
2014/12/04(木) 14:18:36.65ID:wTkc/yZH2010から色々と変更入ってるから、それ以前と比べるとメジャーアップデートに
なるからねぇ。アクセスなんかも同じく。
0404401
2014/12/04(木) 14:32:20.29ID:Xbcc7r/ADim wk As String, i As Integer, ary As Variant
Set c = Worksheets("条件指定").Range("D11") '←条件のある基準位置
wk = ""
For i = 0 To 8 '←9回繰り返し
If IsNumeric(c.Offset(i, 0).Value) Then '←縦方向に見ていって数値なら
wk = wk & c.Offset(i, 0).Value & "," '←条件(の文字列)に加え
End If
Next i
ary = Array(Split(wk, ",")) '←splitでバラして配列へ
で、.AutoFilter Field:=1, Criteria1:=番号の代わりに
.AutoFilter Field:=1, Criteria1:=ary, Operator:=xlFilterValues
としてみてください。null値も配列に入ってしまいますが検索には影響ないみたいです。
0405デフォルトの名無しさん
2014/12/04(木) 14:55:57.82ID:mUaAsPlWすみません、冒頭のものは Dim 番号 As Variant のところに代わりに入れ、
.AutoFilter Field:=1, Criteria1:=番号 は
.AutoFilter Field:=1, Criteria1:=ary, Operator:=xlFilterValues に書き換えればいいのですか?
上のように書き換えてみたら「型が一致しない」と出てしまいました
If 番号 <> "" Then のところで引っかかります
0406404
2014/12/04(木) 15:12:18.32ID:Xbcc7r/AIf IsNumeric(c.Offset(i, 0).Value) Then を
If c.Offset(i, 0).Value > 0 Then に変更 と
If 番号 <> "" Then を
If Len(wk) > 1 Then に変更してやってみてください。
番号 は配列なので、ひとまとめに何かと判断はできないと思います。
Len(wk) とすることで、条件となる番号の値を , で連結した文字列の長さを調べ
(何かひとつでもあれば , も付加しているから)2文字以上あるので、
番号でもフィルターをかけることになります。
IsNumeric(c.Offset(i, 0).Value) のままだと、Null値もwkに組み込まれてしまうので
c.Offset(i, 0).Value > 0 に変更しました。
0407デフォルトの名無しさん
2014/12/04(木) 15:27:00.77ID:mUaAsPlW丁寧にありがとうございます…!
が、今度は「Range クラスの CurrentRegion プロパティを所得できません」と出てしまいました
With Worksheets("住所録").Range("A1").CurrentRegion
の所で引っかかります
0408デフォルトの名無しさん
2014/12/04(木) 15:32:36.52ID:DGTsH29e0409406
2014/12/04(木) 15:34:05.23ID:Xbcc7r/A補足ですが、Dim 番号 の部分と
番号 = Worksheets("条件指定").Range("D11:D19").Value は不要です。
セル範囲から直接 番号 というVariant変数に入れる代わりの
ary = Array(Split(wk, ",")) なので。
0410デフォルトの名無しさん
2014/12/04(木) 15:40:05.37ID:mUaAsPlW確かに行き当たりばったりの頼りっきりです
自分のできる範囲での修正は>>374まででした
スレ汚し申し訳ございません
>>409
関係ない範囲でしたか
丁寧にありがとうございました
0411デフォルトの名無しさん
2014/12/05(金) 13:22:23.97ID:idtToX3B朝9時から夕方6時までずっとExcelは起動しっぱなしです。
やっぱりマクロのコードのオブジェクト変数は
使ったら必ず「Set obTest=Nothing」と書いたほうがよいのでしょうか?
このへん上級のプログラマなら
VBAでガベージコレクションがどう機能してるかについて詳しいはずだから
答はでているのでは?とも思いますが。
ちなみにいまは会社ではExcelは一日中立ち上げてるので
動作がかなり遅くなることはよくあります。
オブジェクト変数を解放していないのが原因かは不明ですが。
0412デフォルトの名無しさん
2014/12/05(金) 13:44:40.83ID:y8yZ0uzg0413デフォルトの名無しさん
2014/12/05(金) 14:04:38.97ID:qokOqO79VBAにガベージコレクションは無いし、メモリ使いすぎかどうかは自分でタスクマネージャで確認できる。
0414デフォルトの名無しさん
2014/12/05(金) 14:40:33.85ID:idtToX3Bありがとうございますわ。
じゃあオブジェクト変数は必ず解放する、ということですね。
特にExcelを常時立ち上げて使っている場合には。
0415デフォルトの名無しさん
2014/12/05(金) 14:46:39.79ID:idtToX3Bフォームモジュールの最上部で定義した変数は、そのフォームを閉じるとすぐクリアされるようです。
これは最近発見しました。
このようなことを解説しているVBAの本はないですか?
0416デフォルトの名無しさん
2014/12/05(金) 17:33:32.53ID:qokOqO79> じゃあオブジェクト変数は必ず解放する、ということですね。
そんなこと誰も言ってない。
> このようなことを解説しているVBAの本はないですか?
"VBA 変数 寿命"でググれ馬鹿。
0417デフォルトの名無しさん
2014/12/06(土) 02:05:18.80ID:meclvZqO0418デフォルトの名無しさん
2014/12/06(土) 03:17:22.00ID:KAAv60LGそれなー。
フォームってよく分からないよね。
シートは記述した値はいつまでもシート上に残っているけど、
フォームは1度閉じて再表示するとそこに張り付いているラベルやテキストボックスにコードで記述した内容は消えてしまう。
そもそも型なのかObjectなのかもよく分からない。
生成しなくて使えるってことは多分もう既にObjectなのか、Sheardっぽい型なんだろうけどさー、
閉じたら解放されちゃうんだよねー。
Sheardっぽい型なら閉じて解放ってことはないはずだし、
Objectなら解放されればVE上から消えちゃうはずだし、一体何なんだろうね。
0419デフォルトの名無しさん
2014/12/06(土) 03:32:12.46ID:KAAv60LGフォームを閉じるとクリアされるのはスコープから外れるためだね。
だとしたらモジュール単位で設定したPublicな変数なら解放されないはず。試してないけど。
0420デフォルトの名無しさん
2014/12/06(土) 10:23:22.72ID:6wz6ozntフォームはオブジェクトだろ。
フォームだってHideで閉じる(非表示にする)だけなら値保持してるでしょ。
Unloadするとインスタンスごと無くなるから値も保持されなくて当然。
シートだってブックだってオブジェクトだから削除したら値は保持されない。
0421デフォルトの名無しさん
2014/12/06(土) 10:36:04.16ID:d81glEJQなんかすごいことを語ってますね。
プログラミングの「肝(キモ)」と呼ばれるみたいな感じの重要なことを。
そんな概念を体系的にできるだけ短期間で学ぶにはどうしたらよいでしょうか?
0422デフォルトの名無しさん
2014/12/06(土) 12:46:58.75ID:1n3ui4f5自ずと分かってくるような気がする。
0423デフォルトの名無しさん
2014/12/06(土) 13:18:03.33ID:IILEH88a>Unloadするとインスタンスごと無くなるから値も保持されなくて当然。
・・・オブジェクトとインスタンスの違いって何だと思ってる?
0424デフォルトの名無しさん
2014/12/06(土) 14:31:33.70ID:QyME+XO/0425デフォルトの名無しさん
2014/12/06(土) 14:43:50.08ID:KAAv60LG同じものだよね。俺も>>420見たとき「それってまんま型のことじゃん」って突っ込みそうになったわw
0426デフォルトの名無しさん
2014/12/06(土) 15:03:44.67ID:5q9uOkJS0427デフォルトの名無しさん
2014/12/06(土) 15:57:34.76ID:GWwYeJcu0428デフォルトの名無しさん
2014/12/06(土) 16:17:23.21ID:QyME+XO/VBAでよく使うファイルオブジェクトとか正規表現オブジェクトなんかのオブジェクトは微妙に違う
0429デフォルトの名無しさん
2014/12/06(土) 16:20:50.34ID:QyME+XO/CreateするのはInstanceじゃないのかって
0430デフォルトの名無しさん
2014/12/06(土) 16:30:13.79ID:KAAv60LG>>418からの流れで>>420が広域の意味で言ってるようには見えないけどね。
0431デフォルトの名無しさん
2014/12/06(土) 21:20:45.60ID:KAAv60LG出来るだけ短期間で覚えようなどと考えないこと。
早くポイントだけで覚えようとすると、必ず穴が発生する。
苦労して覚えたものでないと身につかないこともあるし、
稀に苦労なく覚える奴もいるが、苦労して覚えていない分だけ
苦労して覚えた奴の痛みが分からないから、相当嫌らしいねちっこい性格になることが多い。
0432デフォルトの名無しさん
2014/12/06(土) 21:38:26.97ID:d81glEJQ近くにいる誰かにねちっこくいじめられているのですか?
0433デフォルトの名無しさん
2014/12/06(土) 21:53:05.78ID:KAAv60LGいや、どっちかって言うとそう言う奴の鼻っ柱をへし折る方が好き。
虐めることもそう言うこともあまりしないけど。
0434デフォルトの名無しさん
2014/12/06(土) 21:57:41.23ID:QyME+XO/たまにでも人を虐める奴ってどうなんだろうね
0435デフォルトの名無しさん
2014/12/06(土) 22:02:16.38ID:KAAv60LG0436デフォルトの名無しさん
2014/12/06(土) 22:25:18.73ID:d81glEJQそういう勘違いは
まれによくあるよ
0437デフォルトの名無しさん
2014/12/07(日) 00:14:35.42ID:XZYuQeDa1、インスタンスをunloadする
2、インスタンスが無くなる
3、オブジェクトをインスタンスする
4、インクジェットが無くなる
5、インスタンスのオブジェクト
6、オブジェクトのインスタンス
0438デフォルトの名無しさん
2014/12/07(日) 00:37:24.48ID:Nmnb+TJR4は正確には「インクジェットのインクが無くなる」だろうけど、
ふつうに「あのハゲが今日は休みだって」って使うから問題ないな。(「ハゲの人が」の意味)
5も正確には「インスタンスの元となるオブジェクト」という意味で
昔、歴史ものの「映像の世紀」というビデオシリーズがあったから問題ない。(「映像が記録として残るこの20世紀」みたいな意味)
よって誤りのあるものはない。
0439デフォルトの名無しさん
2014/12/07(日) 04:41:17.12ID:j5OxQRAU意味は通じるけどインスタンスは名詞だから、
オブジェクトをインスタンス化する、か、
オブジェクトからインスタンスを生成する、と言わないと駄目っぽい。
0440デフォルトの名無しさん
2014/12/07(日) 05:37:49.34ID:j5OxQRAU>Sheardっぽい型なら閉じて解放ってことはないはずだし、
Sheardという言葉を使うということは.Netもやってるね。
なら違和感を感じて当り前だろうね。
フォームは生成しても使えるし、しなくても使える特殊なクラスなんだよ。
.Netのときは最初、明示的にクラスのインスタンスとして生成しなければならなかったけど、
VB6を使ってたユーザーがその概念についてこれなかったため、VB2005で復活したらしい。
実際スタティックエリアに展開され、生成すればヒープエリアにも展開される。
これも.Netからして見れば、旧VBで言うところのRemやGoto、Gosubと同じように負の遺産の一つだろうね。
0441デフォルトの名無しさん
2014/12/07(日) 08:39:10.28ID:bjrsFApG文法と意味合いを厳密に見れば全部間違ってるし
文法としてではなく文として現場で通じるかを見るなら
どれも間違ってるとまでは言えない
全ての選択肢が、誤りとも問題ないとも解釈できるような設問をしているようでは
君にはまだこういう設問は早すぎるってことなので、もうすこし(かなり?)精進してからにしなさい
0442デフォルトの名無しさん
2014/12/07(日) 08:41:45.40ID:Nmnb+TJR0443デフォルトの名無しさん
2014/12/07(日) 08:48:11.76ID:Nmnb+TJR0444デフォルトの名無しさん
2014/12/07(日) 08:53:29.29ID:/ebnx2XJ0445デフォルトの名無しさん
2014/12/07(日) 09:43:19.17ID:Nmnb+TJR0446デフォルトの名無しさん
2014/12/07(日) 10:19:23.59ID:5ewwReDbメッセージを受信する仕組みが有って、そこでメッセージ受けることで処理し、
「それが終われば」次のメッセージ受信に戻るという仕組み。
だから、非常に長時間掛かる処理をやってしまうと、
そのメッセージを受信するという処理に戻れないんで、
アプリが固まったようになってしまう。
DoEventsって、実はメッセージを受信する処理になっていて。
非常に時間が掛かる処理の所々に入れておけば、アプリが固まらなくなるんだ。
まあ、本来の、「処理が終わって元に戻ってから行われる処理」を強引にさせる方法なんで、
推奨出来ないけどなw
0447デフォルトの名無しさん
2014/12/07(日) 10:22:56.05ID:5ewwReDb何か待ちが発生する処理で、ぐるぐるループを回しているとアプリが重いんで、
一定間隔毎に処理させて軽くすることに使われる
0448デフォルトの名無しさん
2014/12/07(日) 10:49:08.22ID:Nmnb+TJRなるほど。
DoEventsだけだと現代高速CPUは1秒間ですら莫大な数のループをするので例えばSleep100で1秒に10回にしてCUPを休ませるということですね。
そうしますと、Sleepだけではメッセージ受信に戻れないのでSleep入れるならDoEventsも必ず入れるべきということですね?
あとSleep5000とかしてしまうと5秒間は固まってしまうからSleep使うなら短時間にすべきということですよね?
0449デフォルトの名無しさん
2014/12/07(日) 11:26:39.64ID:5ewwReDb0450デフォルトの名無しさん
2014/12/07(日) 17:01:05.25ID:+uraxybP0451デフォルトの名無しさん
2014/12/07(日) 17:57:49.02ID:ZkM66KCO0452デフォルトの名無しさん
2014/12/07(日) 19:28:15.37ID:uEfZnt+R0453デフォルトの名無しさん
2014/12/07(日) 21:28:46.75ID:lg2HGHJt下記のソースを書いたのですが2つ目からフィルターが上手くかかりません。
どこが悪いのかヒントを頂けないでしょうか
Sub Macro1()
Dim place As String
Dim add_place As String
Dim num As String
nom = 3
place = "*" & Sheet1.Range("E" & nom) & "*"
Do
Sheet1.Range("$B$2:$B$8").AutoFilter Field:=1, Criteria1:=Array( _
place), Operator:=xlFilterValues
nom = nom + 1
If Sheet1.Range("E" & nom) = "" Then
Exit Do
Else
add_place = "*" & Sheet1.Range("E" & nom) & "*"
place = place & """,""" & add_place
End If
Loop
End Sub
0454デフォルトの名無しさん
2014/12/07(日) 23:10:14.18ID:tdyePqfX自分は古いVersionのExcelだからテスト出来ないけれど
Do
Debug.Print place
・
・
といれてみると分かると思うけど
placeの値が
*a*
*a*","*b*
みたいに2回目から変な所に " が入ってるけど これいいの?
0455デフォルトの名無しさん
2014/12/07(日) 23:58:33.27ID:lg2HGHJtマクロを記録したソースだと
"a","b"
となっていたのでこう書きました
0456デフォルトの名無しさん
2014/12/07(日) 23:59:05.45ID:lg2HGHJtお礼を書き忘れました
ありがとうございます
0457デフォルトの名無しさん
2014/12/08(月) 01:17:17.48ID:zferDdK7間違いが多すぎてヒントを書くのが面倒なので、元のプログラムに比較的近い形でとりあえず動く状態のコードを書いとく
何がやりたいのか不明なので、これが正解とは限らない
とりあえず変数名numを全部nomとタイプミスしてるので、これぐらいは自分で見直した時に気付こう
Sub Macro1()
Dim place() As Variant ' フィルター条件が3個以上の場合はVariant型の動的配列を使う *2007以降
Dim num As Integer ' Stringでも動くけど数値型の方がいいと思う
ReDim place(1)
place(0) = Sheet1.Range("E3")
num = 4 ' 3は(おそらく)決定なので4から始める
Do While Sheet1.Range("E" & num) <> "" ' ループの条件はここに書く。Exit Doは使わない
ReDim Preserve place(num - 2)
place(num - 3) = Sheet1.Range("E" & num) ' 条件に配列を使う場合はワイルドカードは使えない
num = num + 1
Loop
Sheet1.Range("$B$2:$B$8").AutoFilter Field:=1, Criteria1:=place, Operator:=xlFilterValues ' フィルターの設定は最後、ループの外にした方がいい
End Sub
0458デフォルトの名無しさん
2014/12/08(月) 01:38:55.44ID:zferDdK7Sheet1を削ってもいいかどうかは状況による
Sub Macro1()
Dim place()
Dim num
num = 3
Do While Range("E" & num) <> ""
ReDim Preserve place(num - 2)
place(num - 3) = Range("E" & num)
num = num + 1
Loop
Range("$B$2:$B$8").AutoFilter Field:=1, Criteria1:=place, Operator:=xlFilterValues
End Sub
0459デフォルトの名無しさん
2014/12/08(月) 01:50:59.63ID:vn62uG8DMsgBox "命令2"
Else
MsgBox "命令1"
End If
とし
A1の数値を1を入力して実行した場合と110を入力して実行した場合では表示スピードに差はありますでしょうか?
厳密に考えますとElse以下に書いた場合1処理ぶん遅延が生じるかと思うのですが実際の所どうなのでしょうか?
0460デフォルトの名無しさん
2014/12/08(月) 02:52:41.18ID:zferDdK7差はあるけど、どっちが速いか遅いかは不明
前にたまたま別の言語で内部を調べた時は、処理の順番の関係でElse以下の方が速くなるようなコードになっていたので、
条件を逆に書いて、速くしたい方をElseに書くようにしていたこともある
そもそもMsgBoxは人間が認識する物だから、ディスプレイのリフレッシュレート未満の差は物理現象として現れない可能性が高いからまず知覚できないし
MsgBoxを別の計算式か何かに置き換えて、1000万回ぐらいループすれば違いを調べられるかも
0461デフォルトの名無しさん
2014/12/08(月) 04:23:39.43ID:1cPOmeTvだがそもそも、そのPCで動いてるのはそのVBAだけではないので
その程度の違いを1000万回やろうと有意な差が観測できるとは思えん
0462デフォルトの名無しさん
2014/12/08(月) 08:49:04.27ID:rsIczcHG多分逆。110の方が早いかな。
理由はILとして考えたとき、最初に条件分岐命令が走った後、1の場合はElseの所で条件なし条件分岐命令かジャンプ命令がもう一度走る。
1オペランド分1で実行した方が実行命令が多くなるので、その分だけ遅くなるはず。
0463デフォルトの名無しさん
2014/12/08(月) 09:38:46.88ID:rsIczcHG分岐命令は自分の直下処理を実行しようが飛び先を実行しようが相対的に見た実行アドレスが変更されるだけのはずなので、
処理コストは変わらない。ただし、あまりにアドレスが離れている場合はジャンプ命令に置き換わるのでそうなると
一見110の方が早くなる可能性が考えられるが、結局Elseの直前でまた飛ぶ際に同じ処理コストが掛かることになる。
つまり、110の実行は1の実行より早くなることはないと言うことになる。
0464デフォルトの名無しさん
2014/12/08(月) 11:17:58.45ID:zferDdK7今のCPUは分岐予測してるから、どっちが速いかなんて機械語を見ただけじゃ単純には判断できない
0465デフォルトの名無しさん
2014/12/08(月) 11:35:29.15ID:28cVONtB0466デフォルトの名無しさん
2014/12/08(月) 11:54:54.12ID:zferDdK7Excel2010、Win7、Core i5の環境で、他のアプリの影響も考慮して1千万回テスト
ワークシートのA列にThen側の実行時間、B列はElse側、C列に時間差を並べてみた
C列がプラスならThenの方が速い、マイナスならElseの方が速い
結果、Then側のが優勢だった
ちょっと長くなったんで、コードはここに
https://friendpaste.com/B8C0vX1H4Qm4dtoCunusE
0467デフォルトの名無しさん
2014/12/08(月) 18:21:21.79ID:LnH9IdQj0468デフォルトの名無しさん
2014/12/08(月) 19:31:03.63ID:KOL07OajDim x as Booleanのとき、x = -xじゃうまくいかん。
0469デフォルトの名無しさん
2014/12/08(月) 19:34:10.11ID:eaq2ekGPMsgBox s
s = Not s
MsgBox s
は?
0470デフォルトの名無しさん
2014/12/08(月) 19:34:16.12ID:0dyzdpGy0472デフォルトの名無しさん
2014/12/08(月) 21:11:49.52ID:KOL07OajDim St() as Worksheetで
Set St = Nothingとするとエラーが出て困ります。
0473デフォルトの名無しさん
2014/12/08(月) 21:13:19.06ID:0GVFzRa4代替手段として何かオススメはありますか?
ざっと数えても100以上のツールでカレンダーコントロールを利用してるもので困ってます
0474デフォルトの名無しさん
2014/12/08(月) 21:27:21.47ID:UQyYYQHaErase St
0475デフォルトの名無しさん
2014/12/08(月) 21:37:34.13ID:KOL07Oajありがとう
0476デフォルトの名無しさん
2014/12/08(月) 21:39:44.99ID:KOL07Oajもし縦長なら縦長印刷に、横長なら横長印刷にするにはどうすればいいですか?
つまりシートのUsedRangeで縦と横の長さの値を知りたいのですが。
0477デフォルトの名無しさん
2014/12/08(月) 21:44:32.43ID:KOL07OajActivesheet.Usedrange.Width
Activesheet.Usedrange.Height
でいいんかな
0478デフォルトの名無しさん
2014/12/09(火) 09:12:31.77ID:FKA2NevI長方形ではなく丸(○)くしたいのですが方法はありますか?
0479デフォルトの名無しさん
2014/12/09(火) 09:19:55.31ID:FKA2NevIWhileとUntilの違いって
「While (条件文)」はそのまま使うとして、「Until (条件文)」は「While Not (条件文)」と同じじゃないですか?
0480デフォルトの名無しさん
2014/12/09(火) 09:22:10.59ID:FKA2NevIDo〜Loop文使うならUntilは廃止して「While Not (条件文)」に統一したほうがプログラミング哲学的に好ましくないか?
0481デフォルトの名無しさん
2014/12/09(火) 09:49:50.35ID:UPvUDhoa哲学とか言い出すのは大学生ぐらいの若者特有の思考だな
大人の世界には「過去のしがらみ」ってのがあって、簡単には効率化できないんだよ
そういうのを嫌って「ぼくの考えた新しい言語」を作ってるやつが世界中にいっぱいいるから、まあ、がんばれ
0482デフォルトの名無しさん
2014/12/09(火) 09:51:32.88ID:UPvUDhoa画像クリックをボタンの代わりにする
0483デフォルトの名無しさん
2014/12/09(火) 10:06:11.42ID:FKA2NevIもし丸い画像を作ってそれを配置してもクリックは四隅の丸のエリア外もクリックできてしまうのでは?
0484デフォルトの名無しさん
2014/12/09(火) 10:08:52.95ID:FKA2NevIこういう関数は作れませんかね?難解かもしれませんが。
[引数]=色のRGB値 as Long
[出力]=色の定数の文字列 (存在しなければ空白値) as String
0485デフォルトの名無しさん
2014/12/09(火) 10:16:14.29ID:FKA2NevI0486デフォルトの名無しさん
2014/12/09(火) 11:04:46.50ID:1BV7kvVsいちいち上げんな
XlRgbColor Enumeration (Excel)
http://msdn.microsoft.com/en-us/library/office/ff197459.aspx
0487デフォルトの名無しさん
2014/12/09(火) 13:39:15.67ID:UPvUDhoa「定数の一覧をコピペするんじゃなくて、コードで取得したいんですよね」
0488デフォルトの名無しさん
2014/12/09(火) 14:01:14.31ID:FKA2NevIその一覧をもとに変換するとしたら
元データであるこの定数を常にどこかに保存しておいてそれを毎回参照しないといけないじゃないか。
そうではなくこのenumであるXlRgbColorのメンバをコードから取得できない?
そうすれば元データを用意する必要がないだけでなく誰かが誤って元データを改ざんしたりする心配もなくなる。
0489デフォルトの名無しさん
2014/12/09(火) 14:06:21.32ID:FKA2NevIすべて色定数があるかどうか調べるにはどうしたらいいと思う?
http://pds.exblog.jp/pds/1/200810/31/99/a0074899_1723918.gif
http://pds.exblog.jp/pds/1/200810/31/99/a0074899_1745063.gif
0490デフォルトの名無しさん
2014/12/09(火) 14:47:07.16ID:XhkuuQ4F0491デフォルトの名無しさん
2014/12/09(火) 15:13:10.80ID:L9Kvawn8どうにかしてXlRgbColorに定義されているもの一覧を取得できるかもしれないけど、
文字列には変換できないだろうね。
どうしてもやりたければ
if (myColor = XlRgbColor.rgbAliceBlue) {
colorName = "Alice Blue"
} else if (myColor = XlRgbColor.rgbAntiqueWhite) {
...
} else if ...
ってずらずら書けばいいんじゃないの?
0492デフォルトの名無しさん
2014/12/09(火) 15:15:06.13ID:L9Kvawn8> すべて色定数があるかどうか調べるにはどうしたらいいと思う?
マクロを記録しながら一個一個全部選択して、そのコードを参考にしてXlRgbColorに存在するかどうか調べるしかないんじゃない?
0493デフォルトの名無しさん
2014/12/09(火) 15:39:52.16ID:yvdA+YxeそしてA.xlsxの標準モジュールに
sub test()
workbooks.open B.xlsx
workbooks.open C.xlsx
userform1.show vbModeless
end sub
とあったとすると、実行した場合にB.xlsxがUserForm1より前面に表示されてしまいます。
(読込み終わりを待たないでフォームを表示するんですね…)
Userform1を最前面に表示することは出来ないでしょうか?
0494デフォルトの名無しさん
2014/12/09(火) 16:14:17.44ID:wx8M0Aqfってか、「ユーザーフォーム 最前面 」でぐぐりゃでてくる
0495デフォルトの名無しさん
2014/12/09(火) 16:23:05.15ID:UPvUDhoaExcel 2010でちょっと探してみたら定数はexcel.exeの中に直接全部書いてあったんで、
exeファイルをバイナリモードで開いてrgbという文字列を頼りに取り出すしかないと思うよ
0496デフォルトの名無しさん
2014/12/09(火) 16:27:31.02ID:UPvUDhoaExcelのユーザーフォームにはボタンの形状を変える機能がないので(APIにはあるけど)
小さい画像をたくさん並べるぐらいしかないと思う
極端な話、1ドットの画像をずらっと並べれば、当たり判定をどんな形にもできる
あとは作成の手間と「角クリックを排除する」必要性とのトレードオフ
0497デフォルトの名無しさん
2014/12/09(火) 16:45:45.20ID:L9Kvawn8> 定数の文字列がないとソースを解釈してコンパイルできないんだから、どこかには一覧が記録してあるはず
タイプライブラリから直接情報を取れんこともない。ちょっと古いが以下を参照。
http://support.microsoft.com/kb/239930/ja
でも、>>491の方が簡単だと思うんだけど・・・。
0498デフォルトの名無しさん
2014/12/09(火) 19:05:26.20ID:yvdA+YxeAPIしかないですかね。
ありがとうございます。
0499デフォルトの名無しさん
2014/12/09(火) 19:38:29.50ID:UhKI3ccjプログラム(コーディング)で使うためなら、元データはすでにExcelの中に用意されてるので普通に使える
実行時にプログラムで値から列挙名を取得したとして、今度はそれを使う方法がないぞ
>>492,495
自分でずらずら書くなら、列挙の中身はヘルプに全部書いてある
>>497
COM公開されてるんだからタイプライブラリから取れるだろうなとは思ったが
簡単にやる方法は無いと思ってたんだが
やってみようと思ったが、tlbinf32が無いわw
VBに付属のモジュールなんだな
0500デフォルトの名無しさん
2014/12/09(火) 19:39:38.11ID:UhKI3ccj再現しないな。うちではB.xlsxの読込まつぞ
ホントにそれだけのコードで再現するか?
試しにユーザーフォーム表示させてから別のブックOpenしても、ユーザーフォームが上に表示されたままだったけど
0501デフォルトの名無しさん
2014/12/10(水) 00:43:52.35ID:SulW7Jeq2007と2010でマクロ使うならxlsmとかxlsだったけど。
0502デフォルトの名無しさん
2014/12/10(水) 01:06:20.73ID:mcnoKCOaGetEnabledMacro関数をそれぞれに実装しています。
単体でxlamを動かせば問題ないのですが、
両方をExcel2010に読み込むと、後から読み込んだほうの xlam内のGetEnabledMacro
がどちらのtabからも呼ばれます。
その結果、最初に読み込んだxlamが正しく動きません。何がおかしいのでしょうか?
0503デフォルトの名無しさん
2014/12/10(水) 01:32:31.36ID:gB1mLCDsBとCはマクロで開かれるだけだからマクロ無効の普通の形式で問題ない
openの引数は文字列だから""で囲めとか細かい間違いはあるけど
Aは開いてマクロ追加してから保存するまではそのままで行けるんじゃね、わからんけど
0504デフォルトの名無しさん
2014/12/10(水) 01:40:50.40ID:gB1mLCDsGetEnabledMacroってなんの関数だ?ググったけど
GetEnabledMacro関数 に一致する情報は見つかりませんでした。
だってよ
日本語でググって全くヒットしない関数の話なんか知らんわ
その関数を作ったやつに聞け
0505デフォルトの名無しさん
2014/12/10(水) 07:05:27.06ID:H03252qo名前と実装しているという文言から普通に考えて自作関数だろ。
悪いがそれは流石に読解力が無さ過ぎると言わざるをえない。
0506デフォルトの名無しさん
2014/12/10(水) 07:34:55.31ID:KOm0EyPs読解力ないのはお前だよ w
0507デフォルトの名無しさん
2014/12/10(水) 13:14:55.89ID:gB1mLCDsもしかして関数名とか関係なくて
複数のブックのリボンで中身違うのにonActionに同じコールバック名称付けたって話か?
だったらonAction="tab1.xlam!なんちゃら"とかやれば区別できるだろ
中身同じなら引数でどっちから呼ばれたか区別して処理する方法もあるけど
0508デフォルトの名無しさん
2014/12/10(水) 16:21:39.15ID:Q/okYjD3エクセルで式を使ってプログラムを作りたい場合はここで相談していいんでしょうか?
0509デフォルトの名無しさん
2014/12/10(水) 16:31:13.43ID:DQcC3z6C式って?
セルに、=A1+A2 とか設定するヤツならスレチだよ
0510デフォルトの名無しさん
2014/12/10(水) 16:35:20.40ID:SulW7Jeq質問の内容次第だけど、
VBAを全く使わないならこっちの方がより適切かもしれない。
Excel総合相談所 115
http://peace.2ch.net/test/read.cgi/bsoft/1411803873/l50
ただ、どっちのスレも回答してる人達はきっと被ってると思う。
0511デフォルトの名無しさん
2014/12/10(水) 16:36:09.76ID:Q/okYjD3う、スレチかもしれません。
そういう内容ってどこで聞けばいいんでしょう?
エクセルで検索したらここしか出てこなかったもので・・・
0512デフォルトの名無しさん
2014/12/10(水) 16:38:01.80ID:Q/okYjD3入れ違った・・・
ありがとうございます!こっちで聞いてみます!!
0513デフォルトの名無しさん
2014/12/10(水) 19:57:48.83ID:mcnoKCOaそういう事でした。ありがとうございました。
0514デフォルトの名無しさん
2014/12/10(水) 23:53:53.52ID:NXPpi5N52台目PC Windows7 Excel2010
昨夜のWindowsアップデートを行いましたら、2台のPCの全てのExcelファイルで
ActiveXコントロールが全て無効な状態(ボタンを押しても反応しない、新しく挿入しようとしても
"オブジェクトを挿入できません"とエラーメッセージが出る)になってしまいました
セキュリティセンターの設定でActiveXの設定を有効にしていても効果ありません
ググっても似たような報告は見つけられなかったのですが、こんなことってあるんでしょうかorz
0515デフォルトの名無しさん
2014/12/11(木) 02:16:33.92ID:yUzIzryH0516デフォルトの名無しさん
2014/12/11(木) 03:19:55.61ID:+VVdzRKkKB2553154をアンインストールしたら元にもどりました。
0517デフォルトの名無しさん
2014/12/11(木) 14:34:08.50ID:xek0Kyo1ActiveSheet.Pictures.Insert "C:\unko.jpg"
とすると出来ますが、
なぜこのPicturesというプロパティやInsertというメソッドは[F2]キーで表示できるオブジェクトブラウザには出ていないのですか?
0518デフォルトの名無しさん
2014/12/11(木) 14:35:59.73ID:MEHNlY4yうんこ って書くのをやめたまえ
0519デフォルトの名無しさん
2014/12/11(木) 16:19:38.59ID:xek0Kyo1vbModalとvbModelessがありますが
なぜvbModalとvbModalessじゃないんですか?
そもそも英語はどうなってる?
0520デフォルトの名無しさん
2014/12/11(木) 16:26:02.97ID:FGgppI6Q0521デフォルトの名無しさん
2014/12/11(木) 16:29:29.51ID:xek0Kyo10522デフォルトの名無しさん
2014/12/11(木) 16:51:13.03ID:xek0Kyo1ActiveworkbookとActivewindowの違いはなんですか?
Activeworkbook.NameでもActivewindow.Captionでも、同じファイル名を返すようですが。
0523デフォルトの名無しさん
2014/12/11(木) 21:00:19.99ID:6omyhiW1Activeworkbook.Name
MDI
Activewindow.Caption
SDI用だな
使い道は知らん
0524デフォルトの名無しさん
2014/12/11(木) 22:40:09.61ID:xek0Kyo1なるほどさっぱり分かりませんね。難解です。
0525デフォルトの名無しさん
2014/12/11(木) 22:48:56.24ID:xek0Kyo1でもこれらのコードから作ったControlのイベントプロシージャはどこに書いておけばいいんでしょうか?
Sub unko()
UserForm1.Show vbModeless
UserForm1.Controls.Add "Forms.CommandButton.1"
UserForm1.Controls(0).Top = 0
UserForm1.Controls.Add "Forms.CommandButton.1"
UserForm1.Controls(1).Top = 30
UserForm1.Controls.Add "Forms.CommandButton.1"
UserForm1.Controls(2).Top = 60
UserForm1.Controls.Add "Forms.CommandButton.1"
UserForm1.Controls(3).Top = 90
UserForm1.Controls.Add "Forms.CommandButton.1"
UserForm1.Controls(4).Top = 120
End Sub
0526デフォルトの名無しさん
2014/12/11(木) 22:57:24.22ID:JyGms1TH通常は初期状態ではVBAからVBEを触れないはず
参照設定だかセキュリテイ設定かな。参照設定ってVBAから参照はできた気がするけど、参照設定の追加とかってできたっけ?出来るきはする。検索してみて。
0527デフォルトの名無しさん
2014/12/11(木) 23:07:00.23ID:JyGms1THcmdの結果を取りたいときって、shell() してcmdの出力ファイルを待ってから開くか、wscript.shell(だっけ?)のstdoutを取るか、どっちがいいかな
0528デフォルトの名無しさん
2014/12/11(木) 23:22:31.36ID:JyGms1TH何年もさわってないと忘れますね
0529デフォルトの名無しさん
2014/12/11(木) 23:26:22.30ID:JyGms1THまで書いてカーソルを別の行に移動したときにコンパイルエラーが出るんだけど消せないの?順次コンパイルのチェック外したんだけど…
0530デフォルトの名無しさん
2014/12/11(木) 23:27:17.21ID:eHyMAcvcWithEventsで変数宣言してそれのプロシジャに書く
0531デフォルトの名無しさん
2014/12/11(木) 23:29:40.13ID:JyGms1TH0532デフォルトの名無しさん
2014/12/11(木) 23:36:06.69ID:xek0Kyo1もしそれを書かなければOSに制御はうつらない、つまりExcelしか操作は反応しないということですよね?
でも実際はマクロ実行中でもWindowsのいろんな操作ができるのはなぜですか?
0533デフォルトの名無しさん
2014/12/11(木) 23:43:17.76ID:5nkJCwundoeventsはexcelのプロセスがosからメッセージを受け取る為のもの。
0534デフォルトの名無しさん
2014/12/11(木) 23:47:00.86ID:401ndRx0DoEventsは長時間処理中に溜まってるメッセージを消化して応答無しを回避する為だよ
OSに制御を返すのもあるけど元々時分割でマルチプロセスを実現していてそれを明示的に指示出来るってだけの話
0535デフォルトの名無しさん
2014/12/12(金) 00:16:16.79ID:6bzSKgAdwith .b
ここでaを使うにはどうしたらいいですか?
0536デフォルトの名無しさん
2014/12/12(金) 00:20:11.40ID:gSBC8bLc今のWindowsはアプリから強制的に処理を移すからだよ
昔のWindowsだとOSの操作もできなくなってた
0537デフォルトの名無しさん
2014/12/12(金) 00:22:33.09ID:gSBC8bLc普通にa= とか a. とかって書くだけだが
0538デフォルトの名無しさん
2014/12/12(金) 01:26:00.85ID:6bzSKgAd間違えました
#構成例ココカラ
a
+ .b()
+ .x
+ .y
+ .z
#構成例ココマデ
with a.b()
with .x
ここから b() にです
.parent.y とか、../.y 的な記述はありませんか
0539デフォルトの名無しさん
2014/12/12(金) 01:34:03.31ID:gSBC8bLc普通にa.b(). って書くだけだが
>.parent.y とか、../.y 的な記述はありませんか
ない
その段階で.parentって書くとx.parentに評価されるんだから
xがparentってプロパティを実装して正しく親を返せば.parent.yは行けるだろうけど
0540デフォルトの名無しさん
2014/12/12(金) 01:51:24.60ID:6bzSKgAdないんですか。
with a.b() 内でa.b().xとa.b().yの両方を利用したい場合は、どちらかをsetするか、
with .xとwith .yをブロックを分けて書かないといけないんですね。
どうもです。
0541デフォルトの名無しさん
2014/12/12(金) 07:22:29.80ID:Znidw3LcWindows3.1時代は、アプリが固まったらOSも他のアプリも全部固まっていたけど、
Windows95以降は強制切り替えなので、固まるのはそのアプリだけ。
DoEventsがOSに制御を戻す、というのは理解がちょっと違っていて。
まず、アプリ毎にメッセージの受付箱というかメッセージキューというものが有って、
マウスでアプリをクリックした、アプリ画面を再描画しろ、というのがOSからどんどん放り込まれてくる。
OSは放り込むだけなので、アプリがどう固まろうが関係無い。
で、アプリは一つ一つの処理が終わり次第そこを見に行って、次の処理を行うという仕組みなので、
一つの処理に時間がかかり過ぎたら、マウスにも反応しない、描画も更新出来ない、ということになる。
DoEventsは、こっそりとそのキューを見に行って、次に溜まっているメッセージを読み出して、
そのメッセージが来たときの処理を呼び出してくれる仕組み。
0542デフォルトの名無しさん
2014/12/12(金) 08:28:33.02ID:zyd3uKh1その部分の作り直しをさせられた。
おお神よ、なぜあなたは請負で業務アプリをExcelで作るなどという
意味不明な試練をお与えになったのでしょうか。
0543デフォルトの名無しさん
2014/12/12(金) 08:53:01.30ID:IqSVvB5zは?
Windows9xは、全てのOS巻き込んで落ちますが?何寝言言ってんの?
0544デフォルトの名無しさん
2014/12/12(金) 08:56:22.91ID:Znidw3Lc今は固まる仕組みの話をしている。
巻き込んで落ちるというのはプロセス空間が完全に分離されていないことから起こる
別問題。
0545デフォルトの名無しさん
2014/12/12(金) 09:45:19.56ID:FHJtCtiFこれでシートの「最後のセル」を取得したいときがまれによくありますが1つ問題が。
「最後のセル」を含む領域を消して「最後のセル」が変わったはずなのにExcelはまだその変更を認識しないんです。
(ちなみに一回ブックを保存すると新しい「最後のセル」を認識します。)
これをちゃんと正しく「最後のセル」を認識させるにはどうしたらいいですか?
0546デフォルトの名無しさん
2014/12/12(金) 10:34:39.26ID:bFFFhLfR0547デフォルトの名無しさん
2014/12/12(金) 10:48:24.27ID:FHJtCtiFだからそれ以外の方法を探しているのです
0548デフォルトの名無しさん
2014/12/12(金) 10:53:32.97ID:FHJtCtiFセルに入ってる文字列で使われている色を調べたいときはまれにあると思います。
もし1色しか使われていなければCells(r,c).Font.Colorで簡単に取得できます。
しかし複数色のとき、例えば文字列が「B:oo S:o O:oo」でBが青、Sが黄、Oが赤、他の部分が黒だと(野球のカウントの例)、青黄赤黒の4色使われています。
このような複数色は上記の方法だとNull値が返されます。
そうではなく、使われているすべての色を配列で返す関数を作ってくださいとお願いすれば、どのような回答がもらえますか?
0549デフォルトの名無しさん
2014/12/12(金) 11:56:51.78ID:Ct1lJnrJ氏ねクサレキチガイ野郎
0550デフォルトの名無しさん
2014/12/12(金) 11:57:26.01ID:tqk13lua0551デフォルトの名無しさん
2014/12/12(金) 12:07:10.53ID:79VqDJKC自分で作れカス
0552デフォルトの名無しさん
2014/12/12(金) 12:12:07.60ID:FHJtCtiF0553デフォルトの名無しさん
2014/12/12(金) 16:49:00.89ID:7VXeA7iS0554デフォルトの名無しさん
2014/12/12(金) 16:57:09.54ID:IqSVvB5zなんで複数形なんですか?
0555デフォルトの名無しさん
2014/12/12(金) 19:08:04.28ID:uSyJhMlk一つのセルに複数の情報が入っている糞みたいなファイルだから削除しろ
0556デフォルトの名無しさん
2014/12/12(金) 21:17:27.12ID:TVjAGH2X楽しそうで裏山です。
0557デフォルトの名無しさん
2014/12/13(土) 06:37:20.06ID:15a7//d2そういうのは、マクロの記録で作成する手順を録ると
マクロでの作成の仕方だけではなく、取得の仕方も分かるよ
記録されたコードの
何を = どうする
の左右を逆にして左辺を変数にすれば、大抵は状態が取得できるからね
あとはループやカウンタを使ったりの基本ワザで、取得した情報を
配列なりコレクションなりに整えて返すようにすればいっちょ上がり
と、いくら要求が図々しすぎとはいえフルボッコは可哀想だし、ネタっぽい気もするが
自己解決のヒントくらいはあげてみる
0558デフォルトの名無しさん
2014/12/13(土) 06:57:40.28ID:Gbz//F/Wオレ様の被害妄想には単なる嫌がらせにしか見えないんで叩きたくもなるわ
別パターンで今までに何回かあったやつで、なんだったかの取得が「昔できたけどやり方を忘れたんで教えて」ってやつ
これも勘違いじゃなかったのかってイライラする
一つはシートをアクティブにせずにセル位置を調べる、だっけ
0559デフォルトの名無しさん
2014/12/13(土) 07:18:13.44ID:54ajxy390560デフォルトの名無しさん
2014/12/13(土) 07:28:01.11ID:6Mt5Z73mマトモな質問する雰囲気じゃないからw
0561デフォルトの名無しさん
2014/12/13(土) 09:00:45.14ID:lSx4ToEVPrivate Sub GetStringColors()
Dim color As Long
Dim colors As Object
Dim stringLength As Integer
Dim stringIndex As Integer
Dim targetRange As Range
Set targetRange = Range("A1")
stringLength = Len(targetRange.Value)
If stringLength = 0 Then
Exit Sub
End If
Set colors = CreateObject("Scripting.Dictionary")
For stringIndex = 1 To stringLength
color = targetRange.Characters(stringIndex, 1).Font.color
If Not colors.Exists(color) Then
colors.Add color, color
End If
Next
End Sub
配列に突っ込むのは自分でやってくれ
0562名無しさん@そうだ選挙に行こう
2014/12/13(土) 23:28:38.03ID:MQy+8oYk仕事用の新ツールを土日で作ろうと思ってもボタンもチェックボックスも
「オブジェクトを挿入できません。」になってしまう。
何がOKだ、クソ。
0563名無しさん@そうだ選挙に行こう
2014/12/13(土) 23:33:12.09ID:lSx4ToEVインテリセンスここまで効かないんだっけ。まるでテキストファイルにコード直書きしているような感覚だね。
HashSetどころかDictionaryっぽいものですら参照設定しないと使えないんだよね。
次のOfficeで.Net化してくれないかなぁ。
今のコードが使えてもいいからさ。
0564名無しさん@そうだ選挙に行こう
2014/12/13(土) 23:52:24.31ID:8BYd93oOctagsとviでどうでしょうか?
0565デフォルトの名無しさん
2014/12/14(日) 00:39:43.30ID:MUB4Xi4q・activexに比べフォームはイベントがほとんど無い。changeやclickぐらい(十分といえば十分だけど)。
・コードの記述場所は標準モジュールのみ。
注意する点などはありますか?
0566名無しさん@そうだ選挙に行こう
2014/12/14(日) 08:08:53.84ID:gRzcQuQc年末にそんな改修して、クリスマスに彼女とデートも出来ないくらい忙しくならないように、かな?
0567名無しさん@そうだ選挙に行こう
2014/12/14(日) 09:14:47.89ID:9YzKDTgy彼女とサンタとトナカイを信じていいのは小学生までだぞ
0568名無しさん@そうだ選挙に行こう
2014/12/14(日) 10:25:16.54ID:GdCQCrA70569名無しさん@そうだ選挙に行こう
2014/12/14(日) 10:33:52.93ID:9Dg61XIEx=a
Else
x=b
End If
↑こんなコードの塊で5行も使うのが見にくいのでなんとかしてx=○○○のように単純に1行ですましたいのですが、いい方法はありませんか?
特にこういう塊が複数たくさんあると実に読みにくくなる。
ワークシート関数なら「=If(条件式, x, b)」とものすごくシンプルなのになあ。
0570名無しさん@そうだ選挙に行こう
2014/12/14(日) 10:34:44.53ID:9Dg61XIE0571名無しさん@そうだ選挙に行こう
2014/12/14(日) 10:53:12.76ID:GdCQCrA7IIFが使えるけど、重たいからIFが入った関数を外出しにして、引数と戻り値でやりくりすればいいよ。
0572名無しさん@そうだ選挙に行こう
2014/12/14(日) 11:25:53.28ID:9YzKDTgy昔の文法で1行にまとめた書き方もある
互換性のために今のバージョンでも使えるけど推奨はされない
If 式 Then x = a Else x = b
この書式では End If がなくなるのがポイント
IIfと違って遅くなることもない。5行に分けるのと処理速度は同じ
あとは、代入する値が一定なら配列にするとか
Dim n (-1 To 0)
n(-1) = a
n(0) = b
x = n(式)
0573名無しさん@そうだ選挙に行こう
2014/12/14(日) 11:27:32.20ID:cLCOvUkJx=b
If (条件式) Then x=a
2行で書ける
あと、あげんなボケ
0574名無しさん@そうだ選挙に行こう
2014/12/14(日) 11:32:57.06ID:IU+P2Rml0575名無しさん@そうだ選挙に行こう
2014/12/14(日) 11:34:29.51ID:9Dg61XIEIFFはどうやって使いますか?こちらのパソコンでは使えないようなのですが。
それとIFが入った関数を外に出すとはどういうことですか?
0576名無しさん@そうだ選挙に行こう
2014/12/14(日) 11:36:54.44ID:9Dg61XIEありがとう。でも奨励されないなら使わないほうが無難ですね。
あと配列の件は返り値は可変なのでそれはダメみたいです。
0577名無しさん@そうだ選挙に行こう
2014/12/14(日) 12:03:47.41ID:9YzKDTgyIFFじゃなくてIIf
0578名無しさん@そうだ選挙に行こう
2014/12/14(日) 12:12:59.09ID:9Dg61XIE0579名無しさん@そうだ選挙に行こう
2014/12/14(日) 12:20:14.55ID:9YzKDTgyIfはステートメント、IIfは関数なので、厳密に比較すれば大きな差が出る
複雑な処理で少しでもスピードが欲しい時はできるだけ軽い方を使う
簡単な計算なら違いがわからない
好きな方を選べばいい
0580名無しさん@そうだ選挙に行こう
2014/12/14(日) 13:24:38.60ID:NL1GFC6Eむかし先輩に教わった サイズを減らすのに
0581名無しさん@そうだ選挙に行こう
2014/12/14(日) 15:24:33.27ID:cDZUwrOs>>572の上のように、Elseまで含めて1行に書いた方が軽いけどね
Elseまで含めて1行に書くと
条件判定1回、最少代入回数1回、最多代入回数1回
>>573だと
条件判定1回、最少代入回数1回、最多代入回数2回
この最多代入回数の差が、処理速度に影響する
もっとも、昨今のパソコンなら、余程回数の多いループ内で使うのでもなければ、
体感での有意差は無いだろうが
0582名無しさん@そうだ選挙に行こう
2014/12/14(日) 19:10:52.20ID:GdCQCrA7前者のやり方は言ってる通り推奨されてないのと、
後者のやり方はスピードはともかく、可読性が・・・それに暗黙の変換を利用しているので、
.Netに移行するときは苦労することになるし、移行出来たとしてBox化解除が発生するから結局重くなってしまう。
.Netの話はともかく、やっぱり可読性は大事だと思うよ。
0583デフォルトの名無しさん
2014/12/14(日) 20:21:33.46ID:9Dg61XIEヒラメいたのですがワークシート関数みたいなのを自作すればいいのでは?
こんな感じで。
Function TorF(b As Boolean, t As String, f As String) As String
If b Then
TorF = t
Else
TorF = f
End If
End Function
0584デフォルトの名無しさん
2014/12/14(日) 20:27:21.12ID:gRzcQuQc0585デフォルトの名無しさん
2014/12/14(日) 20:35:36.61ID:9YzKDTgy車輪の再発明にすらなってない
標準で入ってるIIf関数そのもの
0586デフォルトの名無しさん
2014/12/14(日) 20:43:19.69ID:9Dg61XIEわたしの大発見とそのIIF関数ではどっちが速度が速いですか?
0587デフォルトの名無しさん
2014/12/14(日) 20:56:27.19ID:gRzcQuQc考え方として、その形式ならコードが複雑化しても同じ手法で色々使い回しが効く。
コーディングの基本、「同じコードは2度書かない」に則っているからいいと思う。
そこは速度云々の話ではなくて、「後にいかに修正箇所を特定し易くし、いかに修正を減らし、テスト項目を減らすか」に
繋がる部分で評価できると思うよ。ただし、どうしても速度重視の場合は別の話になるかもしれないけど。
0588デフォルトの名無しさん
2014/12/14(日) 21:04:46.27ID:gRzcQuQc0589デフォルトの名無しさん
2014/12/14(日) 23:06:15.62ID:hqFU0UeAコントロールパネル > プログラムのアンインストール >
インストールされた更新プログラムを表示
> KB2726958 をアンインストール 、再起動 で回復しました。
0590デフォルトの名無しさん
2014/12/15(月) 06:34:51.90ID:zp/a3varこれって、どういうこと?
どんなVBAでも並列処理できるということでは無いですよね?
Book1.xlsx
Book2.xlsx
Book3.xlsx
に対して同じ処理をする場合に、3つのBookを同時に処理出来るって
言う感じですよね?
0591デフォルトの名無しさん
2014/12/15(月) 07:36:57.41ID:Q8QPN9Wb同じ処理っていうのがどこに書いてあるのか分からないけど、
それぞれのブックを別プロセスで処理してるか、
計算部をマルチスレッドが使える言語のDLLにでもやらせているんじゃないのかなぁ。
でも、Excelで他のExcelのProjectを統括管理するなんて発想からして糞だから
あまり気にしない方がいいと思うよ。
0592デフォルトの名無しさん
2014/12/15(月) 08:01:38.21ID:U2HtOL9B適用例として、乱数アルゴリズムによる計算処理、モンテカルロシミュレーション、パターンマッチング、など
決まった計算式を、大量の件数行う必要がある業務って書かれてるだろ。
クラスタシステムのジョブスケジューラにExcelマクロを喰わせて処理してると思う。
複数のマクロを同時に処理するのとは意味合いが違う。
0593デフォルトの名無しさん
2014/12/15(月) 08:31:37.74ID:r6OkqYy+発想の優劣と、商売になるか、売れるかどうかは別問題だし
0594デフォルトの名無しさん
2014/12/15(月) 09:14:54.59ID:4rSnIgMy.net化とか、君以外の大多数にとって迷惑なだけなんで、
君がこの世界から消えるといいよ。
0595デフォルトの名無しさん
2014/12/15(月) 09:55:48.03ID:U2HtOL9B0596デフォルトの名無しさん
2014/12/15(月) 10:12:44.63ID:9vXZmS15HPC Services for Excel
http://technet.microsoft.com/ja-jp/library/ff877820(v=ws.10).aspx
基本は、一つのブック中に大量に計算式があれば速くなるって事
どんなVBAでも並列にってわけではないみたいだが
本気でクラスター上でエクセル動かす見たいだな
もはやエクセルは何のソフトかわからん
0597デフォルトの名無しさん
2014/12/15(月) 17:50:55.33ID:AZvgNtk+VBAから、Thisworkbook.Worksheets("xxx").Oleobjects("yyy").Objectで参照できて、イベントもフック出来てたんだけど、
14/12/09付けのMS Security Update後に、「OleobjectsクラスのObjectプロパティを取得できない」とか言われてしまう。
過去のコード資産を修正するのが大変なので、MS更新を適用したままで、簡単に復旧する方法は無いかな?
0598デフォルトの名無しさん
2014/12/15(月) 18:02:07.76ID:ZnoQfTu4こことか
http://www.ka-net.org/blog/?p=5099
こことか
http://support2.microsoft.com/kb/3025036/en-us
に当該アップデートをアンインストールしない解決策が書いてあるらしい
0599598
2014/12/15(月) 18:07:16.61ID:ZnoQfTu42個目のは英文だったので日本語の奴
(とはいえ機械翻訳だから英文のほうが良いかもしれない)
http://support2.microsoft.com/kb/3025036/ja
あとこっちも
http://yamanxworld.blogspot.jp/2014/12/2014-12-office-vba.html
0600デフォルトの名無しさん
2014/12/15(月) 18:18:44.29ID:AZvgNtk+レスありがとう
さっき試したけど、そもそもActiveXコントロールを新規挿入できなくなっててワロタ
さっそく教えてもらった
http://support2.microsoft.com/kb/3025036/en-us
のResolution 1を試した(Cドライブ中の「MSForms.exd」を検索して、見つかったのを全て削除した)所、正常に動くようになった!
素晴らしい!憎いぜ!大将!
0601デフォルトの名無しさん
2014/12/15(月) 19:30:07.72ID:AZvgNtk+本当に助かった、ありがとう、感謝です
ネット記事が出ていることから察するに、本件で多くのVBAerが大慌てだったみたいね(笑)
0602デフォルトの名無しさん
2014/12/15(月) 19:37:37.79ID:EgbXsADn個人がフリーソフトをバージョンアップするんじゃないんだからさ。┐(´д`)┌ヤレヤレ
0603デフォルトの名無しさん
2014/12/15(月) 20:56:37.35ID:+gNep1xB古い書式を新しい書式として扱おうとしてエラーとかそこら辺かなあ。
0604デフォルトの名無しさん
2014/12/15(月) 21:32:22.85ID:Q8QPN9Wb残念ながら普通に考えて俺がこの世界から消えるより先に淘汰されるのは
新しいことについて行こうとする気もなく、ただ何となく毎日行き当たりバッタリなPGを組んでいる君のように
愚劣なコーダーだと思うけどね。
VBAだって出来る人は整然とした設計を書くし、クラスやインターフェースもより効率的に使っている。
そしてそういうコードは.Netに移行するときもさして苦労しない。
大概そういうことを言い出す人が、ながーいコードをドヤ顔で書いて、
引継ぐ人に多大な迷惑を掛けたり、仕事場から使えない奴として追放されたりするからね。
遅かれ早かれ、VBAは今の形態から変わるときが来るだろうけど、淘汰されるまで楽しい余生を過ごせばいいじゃない。
0605デフォルトの名無しさん
2014/12/15(月) 21:54:45.96ID:r6OkqYy+0606デフォルトの名無しさん
2014/12/15(月) 22:36:15.12ID:YzD2lZh5今はそれでいいと思うよ
0607デフォルトの名無しさん
2014/12/16(火) 00:56:35.86ID:SIeALJ8p何をもって若いとするのか分からないけど、始めたのはN-BasicやApple�Uのアセンブラ辺りから。
それで若いと言うことなら若いんだろうね。
ただ、歳をとったことを理由に仕事が出来ないことが正当化されるとか考えちゃってる人は
淘汰されて然るべきとは思うよ。
0608デフォルトの名無しさん
2014/12/16(火) 01:03:25.46ID:JFP/SDwkそんなことよりVBAオブジェクトブラウザ(リファレンス)が
Googleの「もしかして」やブログなんかの「関連記事」、
「関連項目」的な親切さに欠けるんだけど
なんか画期的な解決方法ってあるの?
>HashSetどころかDictionaryっぽいものですら参照設定しないと使えないんだよね
これについて具体的にご指南きぼんぬ
0609デフォルトの名無しさん
2014/12/16(火) 01:08:45.93ID:j1n3Al+vベテランのふりしたニセモノか、すでにボケた老人か
0610デフォルトの名無しさん
2014/12/16(火) 01:46:38.26ID:SIeALJ8p?
VBAでVBScriptのDictionary使う以外でキーとして検索するのにもっと有効な手段があるって言ってるの?
>>561で書いたコードは見ての通り、キーしか必要ないからValuePairである必要が全く無いんだけど。
HashSetって言うのはそう言う意味で書いてるんだけど、何をどう指南しろと言ってるのか全く分からない。
0611デフォルトの名無しさん
2014/12/16(火) 01:55:47.22ID:JFP/SDwk>>Dictionaryっぽいものですら参照設定しないと使えないんだよね
参照設定ってのはCreateObject("Scripting.Dictionary")の事?
VBAコードエディタ>ツール>参照設定 で何か有効にすると、
Dictionary っ ぽ い も の を始めとした様々な
便利な部品が簡単に使えるようになるのかなって読み取ったんだけど、違うの?
違うなら特に用はないや。ごめんね。
エディタの入力候補表示や補完機能がイマイチでコーディング速度が上がらないのよね。
覚えてたらサラサラ書けるんだろうけどさ。
0612デフォルトの名無しさん
2014/12/16(火) 02:33:12.41ID:SIeALJ8p悪いけど流石に参照設定有効にすると何が使えるようになるかは自分でググってくれ。
Dictionaryっぽいものと書いたのはジェネリックの概念さえない型が担保されないようなものを使うしかないのか、
と言う意味で書いてる。
CreateObjectを使えばどっちにしてもインテリセンスは効かないものの、
そちらが言ってる通りVBAのインテリセンスはちょっと酷い。
そこが改善されるだけでも.Net化の恩恵はあると思うよ。
0613デフォルトの名無しさん
2014/12/16(火) 02:58:09.81ID:JFP/SDwk参照設定は必要に迫られたら調べますですはい。
のようなもの、ね、理解した。MSDN漁ったりしなきゃいけないのダルいよね、入力補完はね、頑張ってほしいですね。
本音は入力保管が効かなくてもいいからリファレンスで他の項目へのリレーションを強化してほしいですわ。
メンバが対象とするそのエクセル要素に幾らか関連してる別のオブジェクトやメンバを教えてくれよっていう、怠慢なんだけどもw
0614デフォルトの名無しさん
2014/12/16(火) 02:59:39.18ID:fVzope2j0615デフォルトの名無しさん
2014/12/16(火) 08:04:06.53ID:oqKi7sFgAccessでも、昔は読み書きができてたのに、いきなりアプデでリードオンリーに
されて、多くの個人開発者を地獄にたたき落とした過去があるからな。
正直VBAでこの手のオブジェクトが利用できないとなると、相当に価値が落ちる。
VBA殺そうとしてるんじゃないのか?
0616デフォルトの名無しさん
2014/12/16(火) 13:59:41.06ID:TLF10F5Fもっとも多重継承ができない.Netの仕様は不満
0617デフォルトの名無しさん
2014/12/16(火) 19:20:25.85ID:SIeALJ8p多重継承は使ったことないな。
C++だっけ。C#で無くなっちゃったからなぁ。
相当めんどくさいと聞いてるけど、選択肢が増えるのはいいことだよね。
ちなみにC#の#って、+が4つってことらしいね。
0618デフォルトの名無しさん
2014/12/16(火) 20:37:34.66ID:j1n3Al+v0619デフォルトの名無しさん
2014/12/16(火) 21:41:23.96ID:rJ4g6hQd別に面倒じゃないよ
ダイヤモンド継承の扱いがちょっとややこしいだけ
0620デフォルトの名無しさん
2014/12/16(火) 22:33:40.29ID:JqlD4ksE>ちなみにC#の#って、+が4つってことらしいね
へー、初耳
だとすると、C#は、インクリメント(++)を2回ということになるのか・・・
C++という名称は、C言語への尊敬の念がこめられているって聞いたけど、
C#は、何のどの辺を尊敬してるんだろう・・・
C++の劣化版という印象しかない・・・
0621デフォルトの名無しさん
2014/12/16(火) 22:40:06.69ID:JqlD4ksE>キ†
無いでしょ、そんなのw
0622デフォルトの名無しさん
2014/12/16(火) 22:42:27.26ID:JqlD4ksE0623デフォルトの名無しさん
2014/12/16(火) 22:49:13.18ID:ALAb2Kt/・excel2013
stringsを定義付けしたとたん、
「このオートメーションタイプはvisualbasicではサポートされていません」
と表示されました。
以前同じようなマクロを組んだことがあるのですが、そのときはそんな表示は出ませんでした。
ggってみたのですが、正直よくわかりませんでした。
そもそもどういう意味なのですか?それも含めて解決方法を教えて欲しいです。お願いします
0624デフォルトの名無しさん
2014/12/16(火) 23:43:05.01ID:8M2kREEd俺もポリモフィズムかインターフェース継承しか使わなくなったし。
継承は結局親子間の結びつきが強固になってしまって、
オブジェクト指向のメリットが消えてしまうからね。
今時のオブジェクト指向は、親子でも他人だという考え方で
別クラスとして処理を移譲する方向。
ちなみに、最近はC++がC#の言語仕様を後追いで取り込んで行ってるらしいな。
LINQとかasync/awaitまで取り込めるか分からんが。
0625デフォルトの名無しさん
2014/12/16(火) 23:53:37.08ID:pj6rFb3h0626デフォルトの名無しさん
2014/12/16(火) 23:58:54.62ID:1d+izeUl> stringsを定義付け
> そもそもどういう意味なのですか?
0627デフォルトの名無しさん
2014/12/17(水) 00:01:01.43ID:G/Owp9Dw0628デフォルトの名無しさん
2014/12/17(水) 01:05:53.76ID:AEi19nocちなみにそういったとき、子に当たるクラスを生成させたくないときはどうしてるの?
ほら、継承だと、コンストラクタを隠蔽してしまえば済むじゃない。
0629デフォルトの名無しさん
2014/12/17(水) 07:04:00.56ID:JEgKB6R9ごめんイメージ出来なかった
生成させたくないというのは例えばどういう状況?
継承に限らず、直接生成されたくないクラスはコンストラクタを隠蔽するだけだが??
0630デフォルトの名無しさん
2014/12/17(水) 07:17:49.53ID:AEi19nocごめん逆だ。親に当たるクラスを生成されたくないとき。
0631デフォルトの名無しさん
2014/12/17(水) 07:37:32.87ID:AEi19noc継承関係にあれば親のコンストラクタを隠蔽してしまえばそれが可能になるけど、
委譲となった場合、それをどう制御すればいいのかな?と、思った次第。
0632デフォルトの名無しさん
2014/12/17(水) 07:46:57.49ID:JEgKB6R9それはポリモフィズムのケース、だよねたぶん。
であれば、現代的にも継承を使って問題無い。
言葉が足りなかったが。
現代的には、ポリモフィズム継承はおkだが、実装の継承は避ける方向。
実装の継承とは、それ自体が生成出来るクラスを継承するパターンね。
0633デフォルトの名無しさん
2014/12/17(水) 07:49:02.80ID:JEgKB6R9自分の場合は、子クラスの内部クラスで作ってしまうかな。
そうすれば他から勝手に使われることが無いし。
0634632
2014/12/17(水) 08:02:17.36ID:Oe89WU0p生成されたく無いクラスには abstract を付けるだけ
0635デフォルトの名無しさん
2014/12/17(水) 13:51:26.94ID:GsciMpzGDim obj As Object
Dim strAddress As String
Dim strAddress02 As String
Worksheets("sheet1").Activate
Set obj = Worksheets("sheet1").Cells.Find("筋肉", LookAt:=xlPart)
If Not obj Is Nothing Then
strAddress = obj.Address
Do While Not obj Is Nothing
If obj.Value Like "*マン*" Then
strAddress02 = obj.Address
MsgBox strAddress02
End If
Set obj = Cells.FindNext(obj)
If strAddress = obj.Address Then ←ここでエラー
Exit Do
End If
Loop
Else
MsgBox "見つからない"
End If
End Sub
筋肉 と マン の文字が含まれるセルのアドレスを取得したいと思っています
他にも方法はあるのかもしれませんが、とりあえず上のように組んでみました
が、エラーが出ます。なぜでしょうか
実行時エラー 91 です
0636635
2014/12/17(水) 14:24:15.18ID:GsciMpzG例えば
筋肉 と マン じゃなくて
キンニク と マン だとエラーでない
なんでですか?
0637デフォルトの名無しさん
2014/12/17(水) 14:31:32.94ID:ESqTV4xV0638635
2014/12/17(水) 14:37:19.46ID:GsciMpzGう・・わからねぇ!
それが片仮名か平仮名漢字かに影響するんですか?
うぅぅわからなぇ!
ちょっと調べてきます
0639635
2014/12/17(水) 14:45:51.36ID:GsciMpzG成功するときとしないときがある事がわかった
Findの方を片仮名にした場合は100%成功
でもFindの方を筋肉にしたときも成功することあり
なんなんだこれは
0640デフォルトの名無しさん
2014/12/17(水) 17:19:20.39ID:KbcmbCrBステップ実行しながら変数objの内容を確認してみなよ。
多分、エラー行の直前のFindnextでNothingになるんだと思うよ。
0641デフォルトの名無しさん
2014/12/17(水) 18:29:38.03ID:kDCnFlP7rangeをそれまでの範囲を除外して再検索する。
0642デフォルトの名無しさん
2014/12/17(水) 19:37:36.79ID:0fjBzdT7ローカルウォッチウィンドウとかで変数をターゲットしてラインステップ実行すると、いつ、なぜが見つかりやすいよ
他にもデバッグ用のウィンドウでオブジェクト毎にプロパティーまで見れるとかあっ
0643デフォルトの名無しさん
2014/12/17(水) 20:15:55.98ID:m1a4KKnZ0644デフォルトの名無しさん
2014/12/18(木) 11:15:31.04ID:67KEFWoA>>642
ありがとう
いろいろやってみたんだけどやっぱりよく分からなかったですよ
構文自体はあっていると考えていいんですよね?
とりあえずもう少し原始的な方法でいこうと思ってます
C言語はかじった事があるので
for (i = 1;i < 40;i++) {
for (j = 1;j < 40;j++) {
ここで行数i 列数j で文字列とマッチしないか判断
}
}
みたいな感じができないか模索してきますよ
なんとなく出来そうな雰囲気なので
0645デフォルトの名無しさん
2014/12/18(木) 11:16:22.40ID:67KEFWoA0646デフォルトの名無しさん
2014/12/18(木) 12:30:48.57ID:nEYT4I/rオブジェクト指向の機能はどの程度使えるんですか?
継承とかインターフェイスとかオーバーライドとかポリモーフィズムとか。
0647デフォルトの名無しさん
2014/12/18(木) 12:45:44.23ID:a38PRbZqhttp://members3.jcom.home.ne.jp/daruma_kyo/aboutooa/vba_limit.html
0648デフォルトの名無しさん
2014/12/18(木) 13:10:05.92ID:nEYT4I/rノ ありがとう。勉強します。
0649デフォルトの名無しさん
2014/12/18(木) 13:10:55.31ID:nEYT4I/r「フォームコントロール」と「ActiveXコントロール」はどっちがどう違うのですか?
どっちを使ったほうが有利かというのはありますか?
0650デフォルトの名無しさん
2014/12/18(木) 18:12:20.12ID:PpZ3cpAI> 勉強します。
何を勉強するつもりなの?
Excel を使って業務を効率化したいならいいけど、あまり VBA のクラスを使う機会ないよ。
オブジェクト指向の勉強なら VBA を捨てて、C# でもやった方がいい。
個人なら、Visual Studio の Professional 相当もただで使えるし。
0651デフォルトの名無しさん
2014/12/18(木) 18:19:53.17ID:nEYT4I/rおぉっ、そうですか。
ところでただとはその言語は無料でダウンロードできるってことですか?
C#はいまいちC++と区別がつかないのですが
どっちが何の分野に有利な言語なのですか?
0652デフォルトの名無しさん
2014/12/18(木) 18:24:21.09ID:a38PRbZq> あまり VBA のクラスを使う機会ないよ。
インターフェースの継承とイベントにはかなりお世話になった気がする。
0653デフォルトの名無しさん
2014/12/18(木) 18:26:10.70ID:a38PRbZq0654デフォルトの名無しさん
2014/12/18(木) 18:31:11.72ID:PpZ3cpAI> ところでただとはその言語は無料でダウンロードできるってことですか?
そう、機能制限もなし
MS は開発者には結構優しい
詳しくはこちらで
オプソ開発にお勧め フル機能のVisualStudoが無料に [転載禁止]©2ch.net
http://hayabusa6.2ch.net/test/read.cgi/linux/1415886940/
> C#はいまいちC++と区別がつかないのですが
> どっちが何の分野に有利な言語なのですか?
普通の Windows アプリケーションなら C# の方が楽に作れる
凝ったこととか、将来組み込み分野に行くんだとか思ってる人は C++ で
VB.NET って言う VBA の進化した(と MS は思ってる)奴も使えるし
0655デフォルトの名無しさん
2014/12/18(木) 19:06:14.71ID:9/sbCrmX3DSが好きならC++
VITAが好きならC#
本気にするなよ。
0656デフォルトの名無しさん
2014/12/18(木) 21:15:14.15ID:pd28KeHMsendkeyが使えないのでwinAPIを使うのですがコードの意味がイマイチ分かりません.
キーを上げる動作の時にどうして押す命令と上げる命令をorで結ぶのでしょうか?
詳しく教えて頂けると幸いです.
以下がコードです.
keybd_event &H2C, 0, &H1, 0
keybd_event &H2C, 0, &H1 Or &H2, 0
OS:windows7 ver:2010
0657デフォルトの名無しさん
2014/12/18(木) 21:47:33.06ID:Vf3a9zzkOrしてるのは「押す」と「離す」じゃないよ
bit0は昔のキーボードには装備されてなかった追加キーであることを示す
PrintScreenは追加キーだからだからbit0はどちらも1にする
bit1が押すか離すかの区別で0が押す、1が離す
だから押す時は何もしない、離す時は&H2とOrする
0658デフォルトの名無しさん
2014/12/18(木) 22:27:26.13ID:vAbYcMfr0659デフォルトの名無しさん
2014/12/18(木) 23:06:15.32ID:9/sbCrmX.Netにはシフト演算はあっても、ローテートシフトが無いよね。
有ったとして何に使うんだと言うになるかも知れないけどね。
0660デフォルトの名無しさん
2014/12/18(木) 23:14:00.49ID:pd28KeHM分かりました.
ありがとうございます.
0661デフォルトの名無しさん
2014/12/19(金) 01:43:52.48ID:2a1Lzww2普通のマクロなら追加できるのですが、オブジェクトを選択した状態だとメニューが変わってしまって。
0662デフォルトの名無しさん
2014/12/19(金) 06:29:54.77ID:n3rXKEt5Target As Range, Cancel As Boolean)
If Not Intersect(Target, Columns("A")) Is Nothing Then
Cancel = True
MSGBOX "Done"
End If
End Sub
こんな感じで、カラムがAの場合のみ
右クリックで動くマクロを作りたい
↑でも動いたのだが、なぜか1度実行したら2回目が実行されないというおかしな挙動をする…
エクセルを再起動したら、また同じく1度だけ実行されて、再度右クリックしても動かない。。。。
色々調べたんだが全くわからないのでここで質問しました
環境はWin7 64bit Office2007です
よろしくお願いします
0663デフォルトの名無しさん
2014/12/19(金) 07:15:09.06ID:MmnpThQW> MS は開発者には結構優しい
業務として開発する人にはメッチャ厳しいけどねw
作った物を売る場合だけではなく、自社内の業務で使う場合に置いても
0664デフォルトの名無しさん
2014/12/19(金) 07:29:37.15ID:LnqskZcGそうか?
どの辺が厳しいか詳しく教えてくれ。
0665デフォルトの名無しさん
2014/12/19(金) 08:19:39.45ID:QS7tlhkxなんで、ム板にスレあるのに、Linuxのスレなんか紹介してんの?
Visual Studio 2013 SP6(c)2ch.net
http://peace.2ch.net/test/read.cgi/tech/1417828763/
0666デフォルトの名無しさん
2014/12/19(金) 08:35:16.34ID:LnqskZcGそっちのスレでは Community の前に Express にいっちゃいそうだから
0667デフォルトの名無しさん
2014/12/19(金) 18:55:35.13ID:UechEcEqライブラリ用ブックに蓄積して、そのブックを参照設定して再利用してるな。
参照設定する側からそのクラスを生成する時には、ライブラリ用ブックに生成用関数を別途作っておくようにする。
0668デフォルトの名無しさん
2014/12/19(金) 23:26:08.50ID:6yiRzMRAただの思い込み
その前スレの時にCommunityが公開されて、スレの半分ぐらいがCommunityの話で埋まってたぞ。
俺も住人だが、Communityが公開された現状で今更Expressに話はいかないだろ
0669デフォルトの名無しさん
2014/12/19(金) 23:47:47.03ID:wb+cst2b思い込みって >>665 のリンク先に Express のダウンロードページへのリンクあるし、前スレ読めとか何を言っちゃってるんだか
0670デフォルトの名無しさん
2014/12/19(金) 23:58:09.63ID:VluHuWagみたいに引数を変えないことを明示するためにconstを付けるのと同じ方法ありますか?
0671デフォルトの名無しさん
2014/12/20(土) 00:06:25.14ID:MvUnc9qyただのテンプレ。たまたまスレ立てを担当した人が書き換えないといけないことに気がつかなかっただけだろ
あと、前スレ読めとは一言も言ってないが?
0672デフォルトの名無しさん
2014/12/20(土) 00:55:02.24ID:cUhMXe+F> ただのテンプレ。たまたまスレ立てを担当した人が書き換えないといけないことに気がつかなかっただけだろ
で、それがどうかしたのか?
原因はどうあれ、Express のダウンロードページへのリンクがあることで間違える可能性があることは事実だろ。
> あと、前スレ読めとは一言も言ってないが?
はいはい、前スレ云々は書いてあるけど、読めとは書いてないわな。
小学生かよ w
0673デフォルトの名無しさん
2014/12/20(土) 08:33:17.25ID:B06Quxx2リボンがカスタマイズされたExcelの様なものでしょうか。
0674デフォルトの名無しさん
2014/12/20(土) 09:01:56.84ID:4ivMxLc2無いと思います。
そもそも定数でいいのであれば引数にする必要があるのでしょうか?
0675デフォルトの名無しさん
2014/12/20(土) 09:15:37.55ID:DDEfsbrEExcelがインストールされていない環境でも使えるアプリなのかな。
0676デフォルトの名無しさん
2014/12/20(土) 09:47:46.11ID:cUhMXe+FVBA で印刷、ファイル入出力やネットワーク経由のやり取りも可能だから、ちょっとしたアプリケーションなら普通に作れるでしょ
まあ、今時なら VB.NET とか C# でいいと思うけど
0677デフォルトの名無しさん
2014/12/20(土) 10:03:39.86ID:B06Quxx2いや、Excelを実行プラットホームに動くと思います。何しろ実物知らないので想像なんですが。
ユーザーフォーム主体で、まるでExcelとは思えない、なのか、スペシャルなカスタマイズリボンが追加される方向なのか。
買ったことあるよとか、作って納品した事あるよ、という方がいたら教えて下さい。
0678デフォルトの名無しさん
2014/12/20(土) 10:22:15.77ID:Sd/BNZUu起動時にExcelを非表示にしてフォームのみにすれば普通のアプリっぽくなるよ
昔作ってた
0679デフォルトの名無しさん
2014/12/20(土) 11:10:07.43ID:4ivMxLc2ExcelやAccessのコードから仕様書を作成するツールなら見たことある。
普通にExcelから作られてた。たまにエラーで落ちるんでプロテクト掛かっていなかったから自分で勝手に改修して
使ってた。もう随分昔の話。
0680デフォルトの名無しさん
2014/12/20(土) 12:14:29.48ID:b4Y8NjXLエクセルVBAのヤツ
0681デフォルトの名無しさん
2014/12/20(土) 13:32:51.80ID:z+m4k6Na入力用シートの決まった場所に数字を入れてボタンを押すと
出力用シートが生成されて、それを印刷して提出する
マクロ入りブックをダブルクリックして起動すると、Excelの画面が一瞬表示された後メニューやリボンが非表示になって
ワークシートだけのウィンドウになる。見た目は洗練されてないけど、業務用だからこれで十分
パートさんの9割はVBAどころか、ワークシートに数式すら入れたことないレベルの人だし
0682デフォルトの名無しさん
2014/12/21(日) 01:01:10.90ID:1GU9Ia4Y定数というか呼び出し元の変数を引数にして
それを関数内で間違えて代入してしまうのを防ぐためという意味です
0683デフォルトの名無しさん
2014/12/21(日) 01:02:17.09ID:1GU9Ia4Y訂正
定数というか呼び出し元の変数を引数にして
その引数に関数内で間違えて代入してしまうのを防ぐためという意味です
0684デフォルトの名無しさん
2014/12/21(日) 01:07:13.23ID:dQbD9EbEByVal
0685デフォルトの名無しさん
2014/12/21(日) 01:14:46.67ID:1GU9Ia4Yそういうことじゃないっす
0686デフォルトの名無しさん
2014/12/21(日) 02:03:48.04ID:dQbD9EbE何がしたいのか知らんが
VBAに、関数の引数として宣言してる変数に代入を禁止する方法などない
0687デフォルトの名無しさん
2014/12/21(日) 02:08:57.25ID:J6j4yHTr定数ならグローバルに宣言しとけばいいんじゃないの
0688デフォルトの名無しさん
2014/12/21(日) 02:48:02.90ID:1GU9Ia4YC言語では出来るけど無理ですか
>>687
関数内で引数を勝手に書き換えて使わないでねって意味なのでグローバルだとダメですね
0689デフォルトの名無しさん
2014/12/21(日) 03:42:04.05ID:7sWWn7Ebif Range(A1) が 1〜20の間なら
IF文の条件定義で↑これって(1〜20の間)どう書きますか?
つなげる符号はイコールで良いのでしょうか?
0690デフォルトの名無しさん
2014/12/21(日) 03:45:25.08ID:1GU9Ia4Yまたは
Select Case Range(A1)
Case 1 to 20
0691デフォルトの名無しさん
2014/12/21(日) 03:49:10.05ID:7sWWn7Ebうひょ想像以上に複雑な式ですね
初心者の私がいくら考えてもできないわけでした、ありがとうございます。
0692デフォルトの名無しさん
2014/12/21(日) 04:17:43.33ID:+/Hp2t14引数にリテラル値を指定するか、
引数で指定する定数の宣言を前持って行なっていれば何ら問題はない。
0693デフォルトの名無しさん
2014/12/21(日) 04:28:27.49ID:1GU9Ia4Y自分が関数内で変更を加えちゃいけない引数に
間違えて代入文を書いちゃったときにエラーになるようにしたかったということなので
それじゃダメだと思いますけど
0694デフォルトの名無しさん
2014/12/21(日) 04:30:31.00ID:dQbD9EbE目的は引数の破壊を防ぐことだろ
ByValで宣言された引数は、代入されようが呼び出し元の変数を変更することはない
呼び出し元を変更しないとこを保証するんだから、関数内で代入を禁止する必要はない
だからVBAならByVal使えって話で、Cがどうこうって言うならC使えよ
0695デフォルトの名無しさん
2014/12/21(日) 04:37:01.39ID:1GU9Ia4Yある引数が関数内で一度も変更されずに
関数内の最初から最後まで途中も含めて同じであることを保証する方法ないかなって意味なのでByvalだとダメなんです
同じ質問繰り返してしまっているので、もう止めておきます
ありがとうございました
0696デフォルトの名無しさん
2014/12/21(日) 06:24:18.70ID:B4pht3s2簡単に思いつく方法を3つ挙げると
�@
Property Get Valueをデフォルトプロパティにする
Sub SetValue(Value As Long)で値の設定を行い、Let Valueは作らない
�A
Property Get Value、Property Let Valueをデフォルトプロパティにする
Property Let Valueにおいて、Staticで宣言したLock As BooleanをTrueにする
Property Let Valueが呼ばれても、LockがTrueなら値を書き換えずに終了
�A
Property Get Value、Property Let Valueをデフォルトプロパティにする
モジュールレベルでPublic Lock As Booleanを作る
Property Let Valueが呼ばれても、LockがTrueなら値を書き換えずに終了
�@は、「a.SetValue 100」を使えば何度でも値の書き換えは出来るが
「a = 50」のような値の書き換えは弾かれる
�Aは一度だけ「a = 50」で値を設定出来るが、2度目以降の変更は一切受け付けない
�Bは、任意で「Lock = True」を実行するまでは、「a = 50」で何度でも書き換えできるが
「Lock = True」を実行して以降は書き換えは出来ない
(LockもProperty Let Lockで作れば、一度ロックしたらロック解除不可にも出来る)
そしてどれも値の取り出しは「a.Value」ではなく「a」だけで行えるので、普通の変数と同じように使える
それぞれメリットデメリットはあるが、書き換えは1回だけって条件が問題なければ、
�Aが一番シームレスに変数と同じような扱いが出来るかな
まぁ、そこまで手間掛けるくらいなら諦めるってのも一つの選択ではあるがな
0697デフォルトの名無しさん
2014/12/21(日) 06:42:38.28ID:dQbD9EbEそれは引数かどうかとか関係ない変数のアクセス制御の話
VBAには読み取り専用変数はない
以上
0698デフォルトの名無しさん
2014/12/21(日) 06:49:16.44ID:X7sC2bD2これを複雑と感じてしまうか。
てかむしろVBAで対応する必要すらあるか?エクセル関数だけでも同じ判定できるぞ
0699デフォルトの名無しさん
2014/12/21(日) 07:08:48.27ID:dQbD9EbEクラスはインスタンス化の問題がある上に
VBAだけだとデフォルトプロパティの設定に難がある
そして読み取り専用プロパティに代入しようとしても、コンパイル時にはエラーならない
ないものねだりしてもしょうがないんだけど
まあ読み取り専用変数の代わりにするにはちょっと厳しいかと
0700デフォルトの名無しさん
2014/12/21(日) 09:18:52.39ID:+/Hp2t14>クラスはインスタンス化の問題がある上に
>VBAだけだとデフォルトプロパティの設定に難がある
確かに面倒臭いけど、これらはモジュールで作ることと、初期化関数を作って最初に呼び出してやることで何とかなりそう。
>>699
>そして読み取り専用プロパティに代入しようとしても、コンパイル時にはエラーならない
これは無理。諦めて下さい。
0701デフォルトの名無しさん
2014/12/21(日) 10:43:43.12ID:Xm8mD2hx会社の仕事でインターナルで使ってるサイトはその方法ではできないんです。
なぜか別のページに飛ばされたりURLが複雑で毎回変わるみたいな感じで。
どうなっているのですか?
0702デフォルトの名無しさん
2014/12/21(日) 11:33:14.14ID:ikKWfd9Pサイト作った奴に聞け。
こっそりやりたいなら、Wireshark とかでパケット解析してがんばれ。
0703デフォルトの名無しさん
2014/12/21(日) 21:38:38.58ID:WvuhO5KUなんでわざわざ糞使いづらいExcelのVBAでやろうとするの?
マゾなの?
0704デフォルトの名無しさん
2014/12/21(日) 23:16:06.33ID:LWBfewud君も社会に出てみればわかると思うけど、
会社ってのは色々と融通がきかないんだよ
0705デフォルトの名無しさん
2014/12/21(日) 23:28:15.73ID:E3CmSkNxIEを適切に操作したいです。そのツールはなんと言うのですか?
0706デフォルトの名無しさん
2014/12/21(日) 23:57:31.74ID:UsovulQF0707デフォルトの名無しさん
2014/12/22(月) 01:48:46.51ID:2gZjwJgUttp://m.forest.watch.impress.co.jp/docs/special/20130516_599332.html
0708デフォルトの名無しさん
2014/12/22(月) 02:41:00.70ID:bG/o9/7L0709デフォルトの名無しさん
2014/12/22(月) 09:20:07.39ID:qLGa3oaeVBの文法が嫌いならJScriptでもいいし
モダンなPowerSellとかあるし
自動操作に特化するならAutoItとかAutoHotkeyとかSikuliとかあるし
IE操作するのにExcelを通す意味がわからん
0710デフォルトの名無しさん
2014/12/22(月) 09:20:28.67ID:O5kTxGCIi=i+1
を、1行で、
Debug.Print i; i=i+1
みたいに書けますか?やったら出来なかったのですが。
0711デフォルトの名無しさん
2014/12/22(月) 09:58:55.49ID:rx3aeEoJjavascriptを使う例文は見つかりましたが、この先が厳しいです。
Sub a()
Dim objIE As Object 'IEオブジェクト参照用
'インターネットエクスプローラーのオブジェクトを作る
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True '見えるようにする(お約束)
'文字列で指定したURLに飛ぶ
objIE.Navigate "http://leanmodal.finelysliced.com.au/"
With objIE.document.getElementsByTagName("input")
.Item(0).Value = "ログインID。"
.Item(2).Value = "パスワード。"
End With
'ログインボタンの処理を実行する
objIE.document.Script.setTimeout "javascript:send();return false;", 200
End Sub
0712デフォルトの名無しさん
2014/12/22(月) 10:30:55.65ID:xGC6tvzs正解は
Debug.Print i;: i = i + 1
だけど、VBAやVBでは2行に分けるのが推奨されてる
0713デフォルトの名無しさん
2014/12/22(月) 10:37:35.41ID:xGC6tvzs関数名を調べて、それを直接叩けば動きそうに思えるけど
LINKタグ経由とかで外部リンクだと無理なのかな?(面倒なので未確認
0714デフォルトの名無しさん
2014/12/22(月) 11:26:23.33ID:O5kTxGCIありがとうございました。教えていただいた方法で出来ました。
:が必要なのですね。
0715デフォルトの名無しさん
2014/12/22(月) 17:50:53.20ID:EKhrmcFD0716デフォルトの名無しさん
2014/12/22(月) 22:14:59.39ID:uo67jWxDなにが自動なのでしょうね?
0717デフォルトの名無しさん
2014/12/22(月) 22:57:28.27ID:rx3aeEoJさぁ?マイクロソフトに聞いたら?
まぁテキトーに調べると
Shapeは格好の意味、オートは自動
テキトーに程よい図形にしてやんよって意味じゃないのかね
理由は分からんが図形って名前に変わってるらしいからそんな死語を木にしても仕方ないと思う。
0718デフォルトの名無しさん
2014/12/22(月) 23:25:33.21ID:C0XtR0uVshapeは形状でしょ
種類選択するだけで自動で描画してくれるんだからそこがオートなんじゃない?
0719デフォルトの名無しさん
2014/12/23(火) 03:49:31.39ID:mcXBHbFz△と□を組み合わせて描写してたよーな
0720デフォルトの名無しさん
2014/12/23(火) 05:58:49.24ID:S8DxFIEz大概のBASICにはLINE命令が有ったから矢印で1点ずつはない。
画面上に何かしら絵でも書く時でさえ、LINE命令で点〜点間の線を指定する場合が多い。
点を指定するPSETはブラシ効果や微調整に使われる程度。
0721デフォルトの名無しさん
2014/12/23(火) 06:48:57.14ID:zn+tl5Qaできますが、アクティブではない裏のシートをスクロールする方法は
ありますか?
0722デフォルトの名無しさん
2014/12/23(火) 09:59:59.68ID:rflZsfOY画面が変わるのが嫌ってんならそん時にScreenUpdatingをFalseにしときゃいいだろ
0723デフォルトの名無しさん
2014/12/23(火) 10:44:03.33ID:zn+tl5Qaなるほど。ありがとうございました。早速やってみます。
0724デフォルトの名無しさん
2014/12/23(火) 13:54:41.25ID:OxQBAuusそのセル範囲をコピペしたときちゃんとペーストされないときがあります。
これを確実にペーストさせる方法はどうすればいいですか?
逆にオートシェープは必ずペーストさせないオプションにするときのコードもあわせてお願いもうしあげますですぅ。
0725デフォルトの名無しさん
2014/12/23(火) 16:11:35.48ID:mqCWbeBrPowerShell、うちの場合仕事場のセキュリティが厳しくて、.psファイルが実行できないわ
Windowsのセキュリティポリシー設定変更が必要なんだよね・・
VBSは、同じくセキュリティの都合で別ソフトのIDEとか導入できないから、まだ標準でIDEあるVBAの方が
0726デフォルトの名無しさん
2014/12/23(火) 21:08:01.31ID:HCvDCDCt図形の左上がセルに載ってるか乗ってないかが基準になる
○の形は□に直してから考える
どういうふうに移動させるかを考えないといけないし
とんでもなくめんどくさそう
0727デフォルトの名無しさん
2014/12/23(火) 21:44:23.08ID:OxQBAuusそれは困りましたな
0728デフォルトの名無しさん
2014/12/24(水) 01:08:10.31ID:tVM9CYMMオートシェイプはね、Altキーを押しながらマウス操作するといいですよ。
オートシェイプをコピペしない方法はパッと思いつきませんが、
Shapeオブジェクトがあったはずなので自由自在だった気がいます。
0729デフォルトの名無しさん
2014/12/24(水) 01:59:26.37ID:uqoBPgKJオートシェイプのaltキー押しながらの移動知らんかった
こういうちょっと便利な操作を知ってると作業が楽になるからありがたい
0730デフォルトの名無しさん
2014/12/24(水) 13:25:58.57ID:K6iCECt5その重なってるセルをコピペすると
オートシェイプまでコピペされる場合とされない場合があるのですが
その法則はありますか?
どうも中心の真下にあるセルが含まれてるとコピペされるのかと思ったらされない場合もありびっくりしてる。
0731デフォルトの名無しさん
2014/12/24(水) 13:28:06.61ID:B/XYesfL0732デフォルトの名無しさん
2014/12/24(水) 13:44:40.39ID:K6iCECt5いや、それが左上ではないことだけははっきりと実験でわかったんだよ。
0733デフォルトの名無しさん
2014/12/24(水) 14:11:10.71ID:IVnhWToQhttp://i.imgur.com/jAlH4Lp.png
0734デフォルトの名無しさん
2014/12/24(水) 14:19:32.82ID:K6iCECt5すばらしい!
みんなも実験をかさねてSTAP細胞、いやオートシェイプの法則を見つけようではないか!
ところでその図だと5x5のマスの右側の横2縦5の2x5をコピペすると
オートシェイプも一緒にコピペされるという不思議。
0735デフォルトの名無しさん
2014/12/24(水) 14:21:27.17ID:K6iCECt50736デフォルトの名無しさん
2014/12/24(水) 15:08:16.94ID:B/XYesfLいや、めんどくさいから俺はいいや。あと得るものが少なすぎる
範囲内のオートシェイプを処理
http://www.asahi-net.or.jp/~zn3y-ngi/YNxv9e05.html
単純だけどこの辺でやる方が良いと思うぞ
0737デフォルトの名無しさん
2014/12/25(木) 00:10:23.76ID:v7B1QlDHメインのブックから他のブックを開いて自動で印刷したいのですが、
開いたブックにメインと同じ印刷設定(用紙や給紙トレイ等)を引き継ぐ方法はないでしょうか
0738デフォルトの名無しさん
2014/12/25(木) 00:29:46.60ID:yImkVTgy完全に引き継ぐのは無理
印刷設定の項目には引き継げるやつと引き継げないやつがある
例えば用紙サイズはPaperSizeプロパティで取得できるので、それをそのまま設定してやればいい
0739デフォルトの名無しさん
2014/12/25(木) 00:46:28.08ID:V5trOw/Q普通にメインのブックの設定をプリンタAPIから取得して、それをそのまま代入すれば良いだけでは?
因みにプリンタ個々の設定はプリンタの機種依存なので
具体的な取得や設定方法は、Excel分野ではなくプリンタ分野の話になるからスレ違い
まあ「ページ設定」で設定できる縦横や拡大率、用紙、余白なんかなら、Excel分野の話だけどね
プリンタAPIの仕様を調べて取得や設定出来るだけのスキルが無いなら、妥協策としては
印刷設定を採用したいシートそのものをコピーする(Worksheetのコピー)
印刷したいシートの内容だけをそのシートにコピーする(Rangeのコピー)
を行えば、印刷設定はWorksheetでコピーしたシートのものが採用される
あとは、細かい設定を引き継ぐのではなく、大まかに数種類の設定があって、例えば
�@用紙はカセット1
�A用紙はカセット1、両面印刷
�B用紙はカセット2
�C用紙はカセット2、白黒印刷
の使い分けで事足りるなら、Win側(XPだと「プリンタとFAX」かな?)でそれらの状態を標準とするプリンタ設定を複数用意して、
PrintOutメソッドのActivePrinter引数にそれを指定するって方法もある
0740デフォルトの名無しさん
2014/12/25(木) 00:56:37.13ID:v7B1QlDHありがとうございます
0741デフォルトの名無しさん
2014/12/25(木) 01:02:51.47ID:v7B1QlDHAPIは自分には時間がかかるので捨ててました…
一つのシートでやります
ありがとうございました
0742デフォルトの名無しさん
2014/12/25(木) 01:23:38.27ID:CoTznJwNもう質問止めておきますと言っておきながら再度聞いてしまってすいません。
Sub hoge(Byval data As Long)
data = 5 ← 代入文を間違えて記述。ここでエラーにしたい。
End Sub
Sub hoge(Byref arr As Variant)
arr(6, 4) = 5 ← 代入文を間違えて記述。ここでエラーにしたい。
End Sub
引数に間違えて代入するのを防ぐ方法は、C言語なら引数にConstを付ければ実現出来るが
VBAには手軽に実現できる代替手段がないという理解でOKですか?
0743デフォルトの名無しさん
2014/12/25(木) 02:45:42.56ID:KtfXMYJ70744デフォルトの名無しさん
2014/12/25(木) 03:53:12.99ID:1h250aOU0745デフォルトの名無しさん
2014/12/25(木) 07:27:40.54ID:MnMReXOzReadOnlyプロパティをもつクラスを作って引数にクラスのインスタンスごと渡して
使うときはそのプロパティから値を取得するようにすれば出来るよ。
プロパティに値を設定するときは別メソッド作ってそこでやればいいしね。
0746デフォルトの名無しさん
2014/12/25(木) 11:08:30.76ID:g3diUBPe関数内でうっかり
data=5
と代入するミス何て、自分で注意してれば
防げるだろ。仮に見落としても
期待した結果にならないからすぐ気づく。
0747デフォルトの名無しさん
2014/12/25(木) 11:20:08.92ID:yImkVTgyそういう話じゃないだろ
例えばこういうケースでのタイプミスを防ぎたい、できれば機械的に自動的に発見したい
みたいなことじゃないのか?
Sub Macro1(data1)
Dim data2
data2 = 5
(いかりや く)
0748デフォルトの名無しさん
2014/12/25(木) 11:22:14.55ID:3/a4iui6これでいいだろ。いい加減ウゼェ
0749デフォルトの名無しさん
2014/12/25(木) 12:58:33.74ID:08EStQsXB列に予定の文字列があります。
これをOutlookのカレンダーにそのまま件名として追加したい(本文は空欄でよい)んですが
ExcelのVBAからではどういうコードを書けばよいでしょうか?
0750デフォルトの名無しさん
2014/12/25(木) 16:41:13.27ID:c/bUBZQcExcelからVBAでOutlook操作するより、OutlookからVBAでExcel読むほうが良い気がするが
OutlookのVBAスレってないんだっけ
とりあえず2007だけど軽く書いてみたコード(参照設定してある前提)
Dim ol As Outlook.Application
Dim apitem As AppointmentItem
Set ol = New Outlook.Application
Set apitem = ol.CreateItem(olAppointmentItem)
apitem.Start = CDate(Sheet1.Range("A2").Value)
apitem.Subject = Sheet1.Range("B2").Value
apitem.Save
ol.Quit
0751デフォルトの名無しさん
2014/12/25(木) 19:40:24.37ID:v7B1QlDHxlDialogPrinterSetupでプリンタ設定のダイアログを使うと、プリンタ変更か印刷設定どちらかしかできません。
xlDialogPrintだとプリンタ変更と印刷設定をいちどにできますが、OKを押した時点で印刷が始まってしまいます。
xlDialogPrinterSetupで一度に設定するか、xlDialogPrintで即印刷開始しないようにすることはできますか?
また他に1回の設定画面でプリンタ変更と印刷設定のみを行い、印刷は任意のタイミングでできる方法があれば教えて欲しいです。
0752デフォルトの名無しさん
2014/12/25(木) 20:35:58.59ID:08EStQsX嗚呼すばらしい哉。
ありがとうでゴンザレス。
いまから試してみます。
0753デフォルトの名無しさん
2014/12/26(金) 06:45:27.11ID:Ut09yrdMVBAでやるのであれば、どちらにしろ普通にやれば良いだけじゃん
というか、またこの間の印刷設定引き継ぎの子か?
なんか今回も見当違いなこと考えてそうだな
0754デフォルトの名無しさん
2014/12/26(金) 09:46:03.68ID:nS4v0Az9セルの関数として
=MyFunc()
みたいに呼び出された場合と、他のSubなどから呼び出された場合を
見分ける方法ありますか?
0755デフォルトの名無しさん
2014/12/26(金) 10:41:55.09ID:iezbsgxBあるセルに入ってる値を代入したのですが
それが文字列だったためエラーがでます。
文字列なら自動で0(ゼロ)になってくれないのかよ?
もし文字列はゼロにしたい場合、最もシンプルなコードではどうなりますか?
0756デフォルトの名無しさん
2014/12/26(金) 10:49:29.26ID:iwJ0Dkg7TypeName(Application.Caller)
0757デフォルトの名無しさん
2014/12/26(金) 10:51:01.91ID:iwJ0Dkg7a = Val(Range("A1"))
0758デフォルトの名無しさん
2014/12/26(金) 11:12:02.66ID:iezbsgxB(^ ^)v
0759デフォルトの名無しさん
2014/12/26(金) 11:15:56.12ID:iezbsgxB1列じゃなく2列の組み合わせで値をひっぱってきたいのですが
最もシンプルなコードではどうなりますか?
例えばA列「巨人」B列「55」C列「松井」のデータがあったとして
「巨人」と「55」の組み合わせから「松井」というデータをひっぱってきたいのです。
0760デフォルトの名無しさん
2014/12/26(金) 11:24:16.29ID:hrUYNjao巨人_55
というカラムを作ってそれをキーにしてる
0761デフォルトの名無しさん
2014/12/26(金) 11:32:13.16ID:X/mYv0g9if
0762あ
2014/12/26(金) 12:27:11.07ID:B31hRDonl:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::// ヽ::::::::::::::l
l:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::/:::「'ヽ:::::::::::// ヽ:::::::::::|
|::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ノl:::ノ l:::::::/ ヽ::::::::|
ノ:::::::::::::::::::::::::::::::::::::::::::::::::::::/ ゙゙ ノ:::/ ,,;;;;;;,, ,,,,ヽ:::::l
):::::::::::::::::::::::::::::::::::::::::::::::/ ノ/ __,'''i: ('''__):::l
)::::::::::::::::::::::::::::::::::::::::::::::::::/  ̄ ̄ン:. :「 ̄`ヾ
1:::::::::::::::::::::::「 `┤l:::::::::::::::::l  ̄ , ヽ ̄ l
`l:::::::::::::::::::::ヽ :l li:::::::::::::/ ヽ /´ `l |
ヽ::::::::::::::::::::::\_」 lヽ::::/ .l !:-●,__ ノ /
ノ:::::::::::::::::::::::::::ノ | l `゙゙ i ,,;;;;;;;;;;;;;;;;;;;;, /ヽ
,/ ヽ::::::::::::::::::::::( l l::::::::.. /.:''/´ ̄_ソ / `ヽ
ヽ:::::::::::::::ヽ | l:::::::::::... /::// ̄ ̄_ソ / \ ヴッ!!
ヽ:::::::\| l::::::::::::::::... / :::.ゝ` ̄ ̄/ / ヽ
ヽ:::l l:::::::::::::::::::..  ̄ ̄;;'' / ヽ
l l;;;;;;:::::::::::::::.....;;;;............;;;;;;''ノ l
l l '''''''''''''''''''''''''''''''''''''' ̄l | |
http://www.youtube.com/watch?v=z2qK2lhk9O0
0763デフォルトの名無しさん
2014/12/26(金) 13:29:56.54ID:nS4v0Az9ありがとうございました。
0764デフォルトの名無しさん
2014/12/26(金) 17:15:29.18ID:dkpsRF9GWorksheetFunction.Vlookupを使うから複雑になる
Offset使えば?
0765デフォルトの名無しさん
2014/12/26(金) 20:03:56.64ID:/ULns1N3印刷関連を触るのは初めてで、普通にというのがよくわかりません
xldialog〜が使えるということまではわかったのですが…
自分でも見当違いな事考えてるかもしれないと思ったので、他のやり方があればと思い質問しました
0766デフォルトの名無しさん
2014/12/26(金) 20:15:14.75ID:YEg0/K9h元の表はいじれないのでコードでそう書いてまたコードで消さないといけないからめんどい
>>761
詳しくお願いします
>>764
想像もつきませんが
どうOffsetを使うのでしょうか?
0767デフォルトの名無しさん
2014/12/26(金) 22:14:32.22ID:dkpsRF9G764だが説明めんどいから↓見てくれ
http://www.happy2-island.com/excelsmile/smile03/capter00521.shtml
0768デフォルトの名無しさん
2014/12/27(土) 02:17:37.71ID:5GaZ54S217:35:00を作って条件比較しようと思っています。
一致させるには、どう変更すればよいでしょうか?
Public Sub test()
Dim dTime1 As Date
Dim dTime2 As Date
dTime1 = TimeValue("17:37:00")
dTime1 = dTime1 + TimeSerial(0, -Minute(dTime1) + Application.RoundDown(Minute(dTime1) / 5, 0) * 5, 0)
dTime2 = TimeValue("17:39:00")
dTime2 = dTime2 + TimeSerial(0, -Minute(dTime2) + Application.RoundDown(Minute(dTime2) / 5, 0) * 5, 0)
If dTime1 = dTime2 Then
Debug.Print "一致"
Else
Debug.Print "fu一致"
End If
End Sub
0769768
2014/12/27(土) 02:38:27.59ID:5GaZ54S2Application.RoundDownの代わりに、
Intを使っても、一致しません。
なぜだろう?
たぶん、少数誤差が絡んでいると思うのだが。
どうすればいい?
0770デフォルトの名無しさん
2014/12/27(土) 03:56:10.36ID:AHLJK9CUこれでどう?
dTime1 = TimeValue("17:37:00")
dTime1 = TimeSerial(Hour(dTime1), Int(Minute(dTime1) / 5) * 5, 0)
dTime2 = TimeValue("17:39:00")
dTime2 = TimeSerial(Hour(dTime2), Int(Minute(dTime2) / 5) * 5, 0)
0771デフォルトの名無しさん
2014/12/27(土) 04:10:23.58ID:xcx8bYiCVBAで日時を数値として扱うと、時刻は小数点以下として扱われるからなぁ
TimeSerialでの誤差か、それをプラスするときの演算誤差か
とりあえず時刻を5分単位で丸めたいだけなら
dTime1 = TimeSerial(Hour(dTime1), Int(Minute(dTime1) / 5) * 5, 0) とか
dTime2 = TimeSerial(Hour(dTime2), Application.RoundDown(Minute(dTime2) / 5, 0) * 5, 0) とか
同じと判定されるときはTimeSerialで引数が同じになるようにすれば同じ値になるけど
他にも演算しそうな時には、同じかの判定を
if DateDiff("s", dTime1, dTime2) = 0 とか
念を入れるなら
Abs(DateDiff("s", dTime1, dTime2)) < 許容誤差
とかやるしかないんじゃないかと
秒以下の値が変わっても良いなら、判定前に
dTime1 = TimeSerial(Hour(dTime1), Minute(dTime1), Second(dTime1))
とかやっても良いかもしれんけど、これだとパッと見で何がやりたいか解らんかもしれんと言う罠
0772デフォルトの名無しさん
2014/12/27(土) 04:28:34.97ID:LIHGZKHX最後を
, 0)
ではなく
, Second(dTime1))
にしないと、仕様が変わっちゃうよ
今回は秒は0だし、加算するTimeSerialの秒は0固定の用だけど
加算されるdTime1およびdTime2の秒数は、必ず0であるとは明言されてないのだから
0773デフォルトの名無しさん
2014/12/27(土) 10:43:43.48ID:APJ+2823それ関係なくない?2列の組み合わせのvlookupを実現させたいんだから
0774デフォルトの名無しさん
2014/12/27(土) 14:23:56.96ID:rfg6HV92二列の検索はvlookupじゃ無意味だからoffsetと言ってるんだが?
767は単にoffsetを検索に使う一例にすぎない
offsetなら何列の条件だろうとifとloopで検索できる
0775デフォルトの名無しさん
2014/12/27(土) 16:40:38.80ID:rfg6HV92Sub 松井検索()
Dim i As Long
Dim 最終行 As Long
最終行 = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To 最終行
With Cells(i, 1)
If .Value = "巨人" Then
If .Offset(0, 1).Value = 55 Then
MsgBox (.Value & "の" & .Offset(0, 1).Value & "番は" & .Offset(0, 2).Value)
Exit Sub
End If
End If
End With
Next
MsgBox ("見つかりません")
End Sub
0776デフォルトの名無しさん
2014/12/27(土) 18:34:25.94ID:zakcobGB次は網羅的で厳密な学習をしたいと考えています。
おすすめの本はありますでしょうか?
0777デフォルトの名無しさん
2014/12/27(土) 18:35:02.06ID:PS8qPAgg0778デフォルトの名無しさん
2014/12/27(土) 19:03:26.38ID:9qQU0LAx大きな本屋に行って自分でいろいろ探してみろよ。
後、「網羅的で厳密な学習」って、、何のために勉強するの?
勉強のための勉強?
0779デフォルトの名無しさん
2014/12/27(土) 19:54:20.15ID:zakcobGB立ち読みではどの本がいいのかわかりづらくて・・・
仕事でVBAを使う機会があったのですが、
(この時はコマンドラインツールのフロントエンドのような物を見よう見まねで作りました。)
もっとVBAについて知っていれば、いろいろ作れて便利そうだなと思いまして。
曖昧な理解や誤解は嫌いな性格なので、不正確な説明のある本は避けたいんです。
作りたい物が具体的に決まっていないので、おっしゃる通り勉強のための勉強だと思います。
0780デフォルトの名無しさん
2014/12/27(土) 20:06:07.18ID:eow/ZtAj入門書系は役に立たんと思う。
ただし言っとくがVBAはそんなに便利じゃないぞ、プログラミングが苦痛になる道具だ。
それしかないから仕方なく使う物なんだ
0781デフォルトの名無しさん
2014/12/27(土) 20:38:33.98ID:69txf99VVBAに限らないけど、プログラミングは解説読んで覚えようとするより実践しながら理解していく方がいいよ
頭の中で考えたことを書いてみると想定外の思わぬ動きするから
不正確な説明で惑わされたくないならリファレンス買って動かしてみるのが一番いい気がする
0782デフォルトの名無しさん
2014/12/28(日) 09:08:19.24ID:RZDgW+sy>>781
アドバイスありがとうございます
実践という意味では練習問題のあるテキストがいいのかなと思っていたのですが、
網羅的なのは逆引きやリファレンスになるんですかね
連休中に本屋で探してみようと思います
確かにExcelでほかの言語が使えたら、わざわざ選ぶ言語ではないですね・・・
0783デフォルトの名無しさん
2014/12/28(日) 10:33:35.36ID:JpE7r06Qどうしてこうシンプルにしないんですか?
Sub 松井検索()
Dim i As Long
Dim 最終行 As Long
最終行 = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To 最終行
If Cells(i, 1).Value = "巨人" Then
If Cells(i, 2).Value = 55 Then
MsgBox (Cells(i, 1).Value & "の" & .Cells(i, 2).Value & "番は" & Cells(i, 3).Value)
Exit Sub
End If
End If
Next
MsgBox ("見つかりません")
End Sub
0784デフォルトの名無しさん
2014/12/28(日) 10:49:06.98ID:HS4v0XFnSub 松井検索()
Dim rgRow As Range
Set rgRow = Range("A1:C1")
Do While rgRow(1).Value <> ""
If rgRow(1).Value = "巨人" Then
If rgRow(2).Value = 55 Then
MsgBox (rgRow(1).Value & "の" & rgRow(2).Value & "番は" & rgRow(3).Value)
Exit Sub
End If
End If
Set rgRow = rgRow.Offset(1)
Loop
MsgBox ("見つかりません")
End Sub
0785デフォルトの名無しさん
2014/12/28(日) 11:00:18.57ID:A3tszYNVシンプル厨さんに質問。
どうしてこう汎用的にしないんですか?
Function VLookup2(ByVal Fst As Range, ByVal Snd As Range, ByVal Rng As Range, ByVal Idx As Long) As Variant
Dim Row As Range
For Each Row In Rng.Rows
If Row.Columns(1).Value = Fst.Value Then
If Row.Columns(2).Value = Snd.Value Then
VLookup2 = Row.Columns(Idx).Value
Exit Function
End If
End If
Next
VLookup2 = ""
End Function
0786デフォルトの名無しさん
2014/12/28(日) 12:05:40.58ID:N1PNqEDrワロタw
0788768
2014/12/28(日) 13:45:45.64ID:Bz93EklgEXCELの株価4本値データを
EXCEL VBAでEXCEL上にローソク足チャートにできるけど、
EXCELフォーム上にローソク足チャートを表示したいんだけど、
できるかな?
ChartSpaceコントロールでローソク足チャートを表示できるかな?
0789768
2014/12/28(日) 13:50:26.62ID:Bz93Eklgフォームにローソク足チャートを表示するなら、
スレチだが、
VisualBasicのほうが、簡単かな?
0790デフォルトの名無しさん
2014/12/28(日) 22:05:55.80ID:jsp0UJL10791デフォルトの名無しさん
2014/12/28(日) 23:07:20.11ID:xJ0vmCJE0792768
2014/12/28(日) 23:54:47.60ID:FaygVLXoフォームにローソク足チャート表示も、
かなり難しそうだな。
どうすればいい?
0793デフォルトの名無しさん
2014/12/29(月) 03:01:18.23ID:U0KZGbK1Excelのグラフに株価チャートってのがあるけど、それじゃだめなん?
0794デフォルトの名無しさん
2014/12/29(月) 03:08:38.02ID:r6WyZZaRa = cell(1,1)
cell(2,2) = a
とやっても値しか入りません…
0795デフォルトの名無しさん
2014/12/29(月) 04:52:13.66ID:/ysTeZx0valueつけなさい
0796デフォルトの名無しさん
2014/12/29(月) 05:00:25.54ID:7TbjclpJそもそも全て別途プロパティによって設定するものだから、一発で設定すると言う意味では無理。
但し、一つの変数でそれらを持ち回ると言うことは可能。ぱっと思い付くだけでも2つの方法がある。
一つはユーザー定義型の変数に設定してしまう方法。
もう一つは専用のクラスを作って各設定値をプロパティで持ってしまう方法。
どちらの方法も大基の部分を変数で持ち回ることによって一つの変数で扱うことができる。
設定を一発で行いたいのであれば、別メソッドを作ってその中で色々設定するようにしておけば、
そのメソッドの外からはあたかも1つの命令で設定したかのように記述することは可能。
そんなプロパティやメソッドを持っているクラスを作っておけばいいんじゃないかな。
0797デフォルトの名無しさん
2014/12/29(月) 07:01:25.99ID:7TbjclpJあ、ごめん。考えてみたらRangeのオブジェクトで全部拾えるかもしれない。
0798デフォルトの名無しさん
2014/12/29(月) 08:13:42.41ID:R9uwHG6j無理じゃね?
Range オブジェクトは参照しかもってないと思うけど
0799デフォルトの名無しさん
2014/12/29(月) 08:21:32.42ID:KsjOOFfJ0800デフォルトの名無しさん
2014/12/29(月) 08:23:36.50ID:DTx8bzRaとても助かりました。やっぱり検索するのは2chからだと痛感した。
会社の月末処理でExcelマクロが動かなくて、ActiveXコントロールが認識できないとしか判らず。
WinUpdateは8月から実施してないし、現象の検索もHITせず。xsd削除であっさり治りました。
Updateはしていない、別の事務所のPCも含めて3台で同じ症状。ExcelのサイレントUPDとしか思えない。
MS最悪
0801デフォルトの名無しさん
2014/12/29(月) 09:29:54.94ID:5Q7C+5Nbそうすると大元のプロシージャ内のスコープの変数が使えなくなるじゃありませんか。
こういう問題はみんなどうやって解決してる?
0802デフォルトの名無しさん
2014/12/29(月) 09:41:46.24ID:7TbjclpJ引数で渡すようにするか、モジュール変数に昇格するか。
0803デフォルトの名無しさん
2014/12/29(月) 09:44:31.24ID:lsuC17vA良い悪い関係なく
グローバル変数で渡すなり、引数で渡すなり色々あるじゃない。
0805デフォルトの名無しさん
2014/12/29(月) 10:04:43.42ID:R9uwHG6jやってみればわかる
0806デフォルトの名無しさん
2014/12/29(月) 10:05:42.48ID:5Q7C+5Nb0807デフォルトの名無しさん
2014/12/29(月) 10:11:39.70ID:5Q7C+5Nb引数で渡すように決心していろいろ変更してたけど
やっぱり面倒なのでモジュール変数に昇格しよーっとと再決心した場合
コードに引数で渡してる部分とモジュール変数にしてる部分が混在して
めちゃくちゃ分かりにくいコードになったらどうしますか?
0808デフォルトの名無しさん
2014/12/29(月) 10:24:38.17ID:330p/8W6PCを窓から投げ捨ててついでに豆腐の角に頭ぶつけて氏ね
0809デフォルトの名無しさん
2014/12/29(月) 10:28:01.55ID:5Q7C+5Nb0810ピラフ
2014/12/29(月) 10:30:50.44ID:+Q2pLJ2Iお豆腐屋さんに行ってお豆腐くださいなーと言えば買えるよ!!
0811デフォルトの名無しさん
2014/12/29(月) 10:39:11.63ID:DTx8bzRaPublic Function aaa(ByRef val1 As String, ByRef val2 As String, 〜(略)〜 ByRef val68 As String) As Long
>>807 昇格する時にプレフィクス変えるから間違わない。
0812デフォルトの名無しさん
2014/12/29(月) 10:47:39.57ID:7TbjclpJ例えば、そのメソッド単体で使用する変数であれば、モジュール変数にすると他の何処かで使っているんじゃないかと
後で分かり辛くなってしまうし、逆に引数で渡した場合は、そのメソッド以外で使おうとすると結局モジュール変数を
作って格納しなければならなくなるから、分かり辛くなる。(受け渡しを行う専用であるプロパティは別)
他にも判断基準は有るけど、メソッドの役割で決めればいいと思うよ。
0813デフォルトの名無しさん
2014/12/29(月) 10:59:17.20ID:7TbjclpJ分かり辛い所があれば更にメソッドの切り出しやリファクタリングを行って分かり易くする。
役割が明確になっていればそれに沿って細分化してきちんとした名前を付ける。
その辺、その時の気分で行き当たりばったりで決めていいもんじゃなくて、
最初からきちんと把握して作成、変更しておかないと、また手が入る時に分からなくなって
コードが肥大化したり、バグの温床になったりするよ。
0814デフォルトの名無しさん
2014/12/29(月) 11:43:13.72ID:R9uwHG6jならどっちでもいいということだろ
>>807
全部書き直せ
0815デフォルトの名無しさん
2014/12/29(月) 13:23:03.84ID:7TbjclpJ参照先で情報抱えてたら拾えるんじゃないの?
0816デフォルトの名無しさん
2014/12/29(月) 13:36:34.24ID:R9uwHG6j参照しかしてないから、書き換えられたら終わりでしょ
0817デフォルトの名無しさん
2014/12/29(月) 14:32:39.01ID:7TbjclpJなにを言ってるのか分からない。
変数を書き換えてしまえば使えなくなるのは、参照型だろうと値型だろうと同じだし、
そんなことを言ったら変数使うなってことになるんだけど、他に方法あるの?
0818デフォルトの名無しさん
2014/12/29(月) 15:02:22.08ID:OWEfB3av0819デフォルトの名無しさん
2014/12/29(月) 16:54:44.30ID:R9uwHG6j変数はセルのコピーだし、必要に応じてさらにコピーできるでしょ
セルもコピーできるけど、それって >>799 だしね
0820デフォルトの名無しさん
2014/12/29(月) 17:38:14.07ID:a8RCFqTRやっと言ってることが分かった。
変更前状態を保持しておく前提で話てるんだね。
なら、>>796の方法でいいんじゃないの?
別のセルを使う必要もないし、位置情報も保持しておくことが出来る。
範囲制御クラスを作って、その中でセル制御クラスを生成するようにしておけば
かなり汎用性の高い基底部品とすることが出来そう。
0821デフォルトの名無しさん
2014/12/29(月) 18:15:15.75ID:R9uwHG6j簡単に言うけどセルの情報ってかなりあるから、結構面倒だよ
0822デフォルトの名無しさん
2014/12/29(月) 20:12:02.12ID:a8RCFqTRまあそうだね。面倒だよ。
だけど上で言ってた役割をきちんと決めて基底部品化しておけば、
後で機能の変更や、言語仕様の変更が有った時でさえそこで吸収出来ることに期待出来る。
全体に変更された命令が散りばめられている場合の修正は仕様変更やテストを考えると、もっと大変なことになるよ。
実際、VBAどうしのバージョン変更でも.Netへの移行でも、そこで随分基本設計から単体テストに至るまで
工数に差が出るのは移行対応したことがある人ならよく分かるはず。
今回の話についてはまず、いきなり全部のセル情報に対応する必要が有るのかと言うことと、
無いのであれば次回必要なときに追加すればいいじゃんと言う考え方もあるよ。
0823デフォルトの名無しさん
2014/12/30(火) 08:52:32.19ID:SQ979eKNsheet1上にボタンを設置しています。
ボタンのクリック時、A列の何行目に特定の
文字列が含まれているかを
確認するマクロを書きましたが、エラーがでて困っています。
sheet1モジュール上に記述
sub button1_click()
Dim wb as workbook
Dim ws as worksheet
Dim targetrange as range
set wb = thisworkbook
set ws = wb.sheets(”sheet1”)
set targetrange = searchword(”文字列”, ws)
msgbox(targetrange.row)
end sub
標準モジュールに記述
public function searchword(byval value as string, byval ws as worksheet) as range
dim returnrange as range
dim lastrow = ws.cells.specialcells.(xlLastCell)
set returnrange = ws.range(ws.cells(1, 1), ws.cells(lastrow, 1)).find(What:=value, LookIn:=xlvalues, LookAt:=xlwhole)
searchword = returnrange
end sub
set returnrange = ws.range(ws.cells(1, 1), ws.cells(lastrow, 1)).find(What:=value, LookIn:=xlvalues, LookAt:=xlwhole)の部分で
オブジェクト変数またはwithブロックが設定されていませんとなります。
検索文字列は必ずあるので、エラー理由がわかりません。
0824デフォルトの名無しさん
2014/12/30(火) 09:00:19.48ID:cs0HXrLxぱっと見しかしてないんで参考になるか分かんないけどさー
>dim lastrow = ws.cells.specialcells.(xlLastCell)
これっていきなり行のオフセットが取れる命令なの?
0825デフォルトの名無しさん
2014/12/30(火) 09:43:39.30ID:cs0HXrLxこのスレ見てるとよく思うけどさ、知識がかたよってる人多いよね。
何かを実現するための命令とか方法とかすっごく詳しいのに、
構造化プログラミングの意味理解してなかったり
根本のところですっぽり抜け落ちてる感じ。
なんかスーパーサイヤ人にはなれるけど空は飛べないドラゴンボールの悟天みたい
0826デフォルトの名無しさん
2014/12/30(火) 10:02:48.75ID:uJmo3HlO使ってるコードをそのまま晒せ
VBEからコピペすればsetとか型名とか先頭大文字になるはずなので
そのまま晒すのが恥ずかしいから、必要であるだろう一部を抜粋して2chに書いてるんだろうが
初心者にはどこが必要なのかなんて判断できないんだし、一部を隠す過程で新たなバグを埋め込むハメになるんだから
例えば、そのコードをそのまま実行すれば、君が言うようなエラーは出ない
いや、問題なく動くって意味ではなく、実行エラーの前にコンパイルエラー(構文エラー)が出るからね
VBAはVB.NETと違って
Dim 変数 = 値
の書き方は出来ないし、functionに対してend functionではなくend subになっているのだからなw
ws.cells.specialcells.(xlLastCell)も、命令の意味的には大体合ってるが
括弧の前のカンマはやはり構文エラーだし、最後に.Rowを付けないと
返ってくるのはLastRowではなくLastCellValueになっちゃう
それ以外で気になるところは
searchword = returnrange → オブジェクトの代入は自作関数の戻り値として代入する場合もSet必須
あたりかな
Setを付けないとオブジェクトそのものではなくデフォルトプロパティの.Valueを代入しようとするが
Range型のsearchwordに文字列や数値の.Valueを代入しようとしればエラーになる
0827デフォルトの名無しさん
2014/12/30(火) 13:55:05.97ID:oHYpnAi/なげーんだよ、バカ
3行以内に収めろよ、チンカス
0828ピラフ
2014/12/30(火) 13:58:29.13ID:KtQfQ9/w丁寧できれいな文章だと思うよ。
___
,;f ヽ
i: i ありがたやありがたや
| | ///;ト,
| ^ ^ ) ////゙l゙l;
(. >ノ(、_, )ヽ、} l .i .! |
,,∧ヽ !-=ニ=- | │ | .|
/\..\\`ニニ´ !, { .ノ.ノ
/ \ \ ̄ ̄ ̄../ / .|
0829デフォルトの名無しさん
2014/12/30(火) 18:24:39.42ID:NlEdkobfさすがにそのコードがそのまま実際に動いてるわけはないと思うが
sheet1とか、どっか他にもsearchwordって関数ないか?
>>826
ちょっと気になったんで言っとくけど
>Range型のsearchwordに文字列や数値の.Valueを代入しようとしればエラーになる
searchwordが有効な単一Rangeなら、エラーにはならないぞ
Rangeのデフォルトプロパティへの代入、つまりsearchword.Valueへの代入だとみなされる
エラーでないけど思ったように動かないパターンの一つ
あとカンマじゃなくてピリオド(ドット)だとかいうホントにどうでもいいツッコミも
08301/2
2014/12/30(火) 19:54:46.31ID:mybMGrinやりたいこと:
エクセルファイルと同じフォルダにtest.emlというEメールファイルがあり、その添付ファイルを保存したい。
(本当はいくつもファイルがありますが、今回は一つだけでいいです)
参照設定は以下の画像です。
http://www.dotup.org/uploda/www.dotup.org80947.png
eml_file.SaveAsFileの時点で、
実行時エラー438
オブジェクトは、このプロパティまたはメソッドをサポートしていません。
が発生します。
Attachment.SaveAsFileはそもそもexcelvbaでは使えないのでしょうか?
http://msdn.microsoft.com/ja-jp/library/microsoft.office.interop.outlook.attachment.saveasfile(v=office.12).aspx
コードは次のレスに貼ります
08312/2
2014/12/30(火) 19:55:14.75ID:mybMGrin'emlをmsgオブジェクトに読み込む
emlpath = ThisWorkbook.Path & "\test.eml"
Set stm = CreateObject("ADODB.Stream")
Set msg = CreateObject("CDO.Message")
stm.Open
stm.LoadFromFile emlpath
msg.DataSource.OpenObject stm, "_Stream"
stm.Close
'attachmentsで一個目のファイルを取得
Set eml_file = msg.Attachments(1)
'ファイル名の確認
Debug.Print (eml_file.Filename)
'保存。しかしが動かない
eml_file.SaveAsFile (ThisWorkbook.Path & "\ああああ")
msg.Close
End Sub
0832デフォルトの名無しさん
2014/12/30(火) 20:04:34.47ID:PmyDHL5vメインとなるものから作りプロシージャや関数はあとで作るトップダウン方式と
さきにプロシージャや関数を作りあとでメインとなるものを作るボトムアップ方式では
どちらが好ましいですか?
0833デフォルトの名無しさん
2014/12/30(火) 20:10:51.32ID:fO5AEx8O不明確なので答えが複数になってしまう。
因みに「好ましい」というのは、あくまでも感情的表現なのでやめるべきだ。
0834デフォルトの名無しさん
2014/12/30(火) 20:41:11.44ID:PmyDHL5v作りやすさやバグが発生しにくさや今後のメンテナンス性など。
0835デフォルトの名無しさん
2014/12/30(火) 20:48:29.79ID:fO5AEx8Oスキルによって「不得手な方」を使うと作りやすさが落ちるし、バグが
発生しやすくなる。
事後的なメンテナンス性は、「出来上がっているもの」に対する評価に
なるので、どのような経過で作成されたかは本来的には影響しない。
0836デフォルトの名無しさん
2014/12/30(火) 21:06:29.87ID:3rL5qUGaSub test()
'emlをmsgオブジェクトに読み込む
emlPath = ThisWorkbook.Path & "\test.eml"
Set stm = CreateObject("ADODB.Stream")
Set msg = CreateObject("CDO.Message")
stm.Open
stm.LoadFromFile emlPath
msg.DataSource.OpenObject stm, "_Stream"
stm.Close
'attachmentsで一個目のファイルを取得
Set eml_file = msg.Attachments(1)
'ファイル名の確認
Debug.Print (eml_file.Filename)
'保存。しかしが動かない
eml_file.SaveToFile (ThisWorkbook.Path & "\" & eml_file.Filename)
End Sub
Attachments(1)で戻ってくるオブジェクトはIBodyPart
Attachmentではないから、使うべきメソッドはIBodyPart.SaveToFile
ついでに、保存時にああああっていう拡張子がないファイルになるのを修正しといた
添付ファイルがない時は考えなくていいよね
後、変数宣言がなくて糞見づらいのと、参照設定してるのにCreateObject使ってるのは意味がないから、しかも参照設定するんだったら下のが足りないよー
Microsoft ActiveX Data Objects x.x Library
Microsoft CDO for Windows 2000 Library
0837ピラフ
2014/12/30(火) 21:37:03.12ID:KtQfQ9/wピラフはきちんと設計してこれで動くってわかっているときは
ボトムアップかな。末端のもの作ってテストして、うん、動くねってこと
確認してそれを使用するところを作ってく。プロトタイピングとか
手探りでどう実装したがいいか考えるときはトップダウン。
0838デフォルトの名無しさん
2014/12/30(火) 21:58:28.23ID:cs0HXrLxそう言った視点で作り上げようと言ってること自体が既におかしいことに気づかないといけない。
なぜならコーディングするときは既に仕様書が出来上がっていて、それに沿って作成されるべきだから。
では仕様書を作成するときはどうかと言うと、どんな機能が有ってどんな部品が必要で、
逆にその部品はどんな役割でどうすれば効率よく使えるかを両面から考えなければいけない。
だからクラス図やシーケンス図などのUMLを取り入れながら作ってるところも少なくない。
前にも話したけれど、その辺は行き当たりバッタリで決めていいもんじゃないと思うよ。
0839デフォルトの名無しさん
2014/12/30(火) 22:04:59.13ID:PmyDHL5vチャーハンとはどう違うんだ?
味があっさりしたものがピラフというイメージがあるけど。
それで自分の好みはピラフだけどね。
0840デフォルトの名無しさん
2014/12/30(火) 22:06:29.14ID:PmyDHL5v作っている過程の途中でそのサブとなるプロシージャや関数がまだ出来上がってないから
テストできないから非効率じゃないのか?
0841デフォルトの名無しさん
2014/12/30(火) 22:12:25.60ID:fO5AEx8Oそのユニットの設計に問題がある。
0842デフォルトの名無しさん
2014/12/30(火) 22:14:04.66ID:cs0HXrLx現実問題としてそう言ったことはよく起こる。
そのときはスタブを作ってテストを行う。
0843デフォルトの名無しさん
2014/12/30(火) 22:14:35.19ID:dsZ32jxlチャーハンは中華
つまり出てくる店が違う
0844デフォルトの名無しさん
2014/12/30(火) 22:21:51.11ID:4OrPIxQIどうすればいい?
0845デフォルトの名無しさん
2014/12/30(火) 22:30:14.57ID:fO5AEx8Oコマンドオブジェクトのユニットテストにコマンドパターン自体は
突き詰めて言えば無関係。
0846デフォルトの名無しさん
2014/12/30(火) 22:35:36.51ID:PmyDHL5vじゃあこんな感じか?
Function GetPirafu() As String
GetPirafu = FriedRice()
End Function
Function GetCharhan() As String
GetCharhan = FriedRice()
End Function
Function FriedRice() As String
FriedRice = "Test"
End Function
0847デフォルトの名無しさん
2014/12/30(火) 22:38:58.36ID:PmyDHL5vそのよくいうスタブってどうやって作るんだ?
例えばFunction GetPirafu()がまだ完成していないときに
仮に"Test"という文字列だけ返させて全体の実行をとりあえず実施したい場合
つくりかけの「GetPirafu」という名前のFunctionを仮の名前にかえないといけなくないか?
0848デフォルトの名無しさん
2014/12/30(火) 22:43:17.62ID:fO5AEx8O0849デフォルトの名無しさん
2014/12/30(火) 22:53:18.14ID:PmyDHL5v本物と仮のプロシージャを上下となりに置いておけば分かりやすいから
そのためには仮で実行してるときはそれを呼び出す側でコードを変えないようにするために
本物は一時的に呼ばれないようにするために他の名前にしないといけない。
0850デフォルトの名無しさん
2014/12/30(火) 22:58:17.11ID:fO5AEx8Oその条件だと>>847 で
> 例えばFunction GetPirafu()がまだ完成していないときに
という条件が成立しない。
つまり、テスト条件が「頭で考えてる事と口に出した事が矛盾している」状態
要するに、もっとちゃんと考えないと、とてもじゃないがまともなプログラムは
できあがらない。
0851デフォルトの名無しさん
2014/12/30(火) 23:06:53.87ID:cs0HXrLxなんで名前変える必要があるのか。
そもそも役割によってクラス分けされていればそのクラスファイルをスタブのものに置き換えてしまえばいい。
よしんば名前を変える必要があったとして、それがどれほどの手間だと言うのか。
質問の意図が分からない。
0852デフォルトの名無しさん
2014/12/30(火) 23:15:53.95ID:PmyDHL5vExcelのVBAの話なんだ
0853デフォルトの名無しさん
2014/12/30(火) 23:32:41.45ID:cs0HXrLx理解していないようだけど、VBAにクラスファイルはあるし、モジュールもクラスの一種。
モジュールは生成しなくても使用出来る暗黙のインスタンスを持ったシングルトンのクラスだよ。
0854830
2014/12/30(火) 23:53:00.60ID:mybMGrinうおおおおおおおおありがとうございます!!!
おかげさまでうまく動きました。感激です。
良いお年を!
0855デフォルトの名無しさん
2014/12/31(水) 01:30:06.75ID:IC4dC0tFもしくは、新たに勉強するとして、アクティブ領域を選択して、データの入っているかいないか判断して、罫線を引くマクロが作りたいのですが、何を参考にすれば良いでしょうか?
何か参考になりそうな本とかHPとか教えて頂けると有り難いです
0856デフォルトの名無しさん
2014/12/31(水) 01:37:43.01ID:WeSzlRtaその程度の内容のマクロなら、昔作ったやつがそのまま新しいExcelでも動くよ
0857830
2014/12/31(水) 01:41:43.36ID:yE66laPzvba 入門
とかでぐぐって、操作方法を読み流す
後はマクロの記録
でぐぐって、マクロの記録をいじれるようにする
後はどうにかなるだろう
0858デフォルトの名無しさん
2014/12/31(水) 10:14:09.57ID:AAeB/eMk職業プログラマじゃない事務職の人とかが前任者のコードと戦いながら我流で身に付けたってケースが多いだろうから仕方ないかと
まあ俺もその一人なんだが、逆にそういう基本的な部分を学べる書籍とかあれば教えて欲しい
0859デフォルトの名無しさん
2014/12/31(水) 11:06:36.43ID:YwQfrYSWそれでちょっと仕事が楽になるだけで十分
0860デフォルトの名無しさん
2014/12/31(水) 11:13:18.95ID:siWjBdTq変な癖が付いたら、どんな再訓練をしてもほぼ直らない事が大昔から分かってる。
0861デフォルトの名無しさん
2014/12/31(水) 11:18:52.27ID:oWiDVyxP多分
0862デフォルトの名無しさん
2014/12/31(水) 13:49:49.97ID:A5Iursra基本は相当抜けてる感じがする
つぎはぎの知識でなんとかやりくりしてるようなイヤな気分
0863デフォルトの名無しさん
2014/12/31(水) 14:45:03.05ID:IC4dC0tF>>857
ありがとうございます
マクロ一つで20種類くらいの機能があり、罫線の機能だけ使っているので、該当するプログラムがどれか分からないと諦めていましたが、ちょっと勉強して見ます
0864デフォルトの名無しさん
2015/01/01(木) 00:55:07.81ID:60M1TNUZ質問です。
この時期、名前欄でおみくじみたいなことができたと思うんですが、
どうやるんでしたっけ?
0867デフォルトの名無しさん
2015/01/01(木) 10:45:45.70ID:2MLrq9sUってか全然vbaに関係ないだろ
0868デフォルトの名無しさん
2015/01/01(木) 15:21:00.08ID:ni6wEQmbいくつかの結合セルが横に並んでいて、それぞれに値が入っている状態で
この数値を配列に一気にとりこみたいんですけど、どのような方法があるでしょうか?
cellsやoffsetでひとつひとつずらしていっても、結合された中で移動してしまって・・・
offsetは一発目はうまくいけるんですけど、その次になるとセル単位になってしまうようで
0869デフォルトの名無しさん
2015/01/01(木) 16:15:47.29ID:O1Wppn1vDim rg As Range
Set rg = Range("A1").MargeArea
Set rg = rg(1).Offset(0, rg.Columns.Count).MergeArea
結合セル単位で見ていくならこんな感じ?
もし範囲が分かっていて結合単位が固定なら、まとめて読み込んだ上で、
結合単位で飛ばし飛ばし読む方が早いかも。
0870デフォルトの名無しさん
2015/01/01(木) 16:40:43.18ID:ni6wEQmbありがとうございます
セルの結合単位はバラバラで、たまに結合されてないセルも混ざっていたり
方眼紙みたいに細かいセルを好き勝手に結合しまくって作った表の各値をDBに取り込もうとしてまして
結局、最初のセルをアクティブ→offset(0,1)でデータ取得してそのセルをアクティブ→offset・・・
と繰り返して取得してみました
0871デフォルトの名無しさん
2015/01/01(木) 17:27:52.61ID:yP9EWtKr全部読みこんでから、Emptyならはじけば良い気がする
0872デフォルトの名無しさん
2015/01/01(木) 18:09:13.22ID:ni6wEQmb中には空白のデータがあるので・・・
数は決まってるので、データ取得→となりへ移動→・・・ってのをその数だけ繰り返してってやってます
ただ、たまに表のフォーマット変更してる人とかもいるのでやっかいで
もう少しスマートな方法がないものかと模索中です
0873デフォルトの名無しさん
2015/01/01(木) 18:27:06.39ID:g7S+XSL40874デフォルトの名無しさん
2015/01/01(木) 19:40:21.80ID:ni6wEQmbあー、そうですね
てか、全て項目名はあるんで、それをフラグにセルの結合状態を把握できそう
それか、そこから横ではなく縦にデータを拾っていくのも悪くないかも・・・
なんかすごいヒントを貰った気がしました
ありがとうございます
0875デフォルトの名無しさん
2015/01/01(木) 20:24:08.08ID:3WRveYWM無理にセルの操作をするより全部テキストとして吐き出して正規表現でゴリゴリやったほうが早かったりする
0876デフォルトの名無しさん
2015/01/01(木) 21:21:17.54ID:ni6wEQmbなるほど、そうかもしれませんね
データシート自体は偉い人が作った激細方眼紙から作った表で、作り直す事とかできなくて
それを数十人で使ってるんですが、今回それらの値を全て集めてDBみたいなものを作ろうということになって
とりあえず休みの間にコードくらい作っておこうと格闘中です
どうもありがとうございました
0877デフォルトの名無しさん
2015/01/01(木) 21:27:36.24ID:BK9p898tないわ〜
凝ったレイアウト使う奴はデータの内容も凝ってるだろうから、改行、カンマ、ダブルクォーテーションとかで破綻するのがオチだろ
0878デフォルトの名無しさん
2015/01/01(木) 23:03:57.80ID:RalYKa+x0879デフォルトの名無しさん
2015/01/02(金) 02:29:07.41ID:ysnbwkKUfor c=1 to 100
if cells(1,c).mergearea(1).column = c then
なんか処理
end if
next
または
c=1
do
なんか処理
c=c+cells(1,c).mergearea.columns.count
loop while c<100
0880デフォルトの名無しさん
2015/01/02(金) 07:13:30.35ID:ibIo6Doo正規表現でカンマとかダブルクォーテーション含む CSV 処理できたら尊敬するわ
0881デフォルトの名無しさん
2015/01/02(金) 15:03:57.52ID:0gJtgWhB正規表現にこだわりすぎて無駄な労力消費してるやつな
むしろ筋金入りのアホだわw
0882デフォルトの名無しさん
2015/01/02(金) 16:15:40.68ID:ysnbwkKUこれとかvbaで書き直したらいいんでないの?
0883デフォルトの名無しさん
2015/01/02(金) 17:01:31.00ID:Uo4jfJGT覚えたらVBA以外の言語や環境で使える?
0884デフォルトの名無しさん
2015/01/02(金) 17:22:01.43ID:ibIo6Dooテキスト処理をする機会が多いなら、覚えておいて損はない
スクリプト言語なら大抵標準的に使えるし、コンパイル言語でもライブラリーに入ってることが多い
ただ、ものによって微妙に仕様が異なるので注意が必要だけど
0885デフォルトの名無しさん
2015/01/02(金) 18:31:07.95ID:Uo4jfJGThttp://yusa007.exblog.jp/22983174/
0886デフォルトの名無しさん
2015/01/02(金) 18:50:07.51ID:0gJtgWhB0887デフォルトの名無しさん
2015/01/02(金) 18:52:56.97ID:DxCfO5+j0888デフォルトの名無しさん
2015/01/02(金) 19:52:00.48ID:Uo4jfJGTPCの前のみなさんはどうしてます?
With使ったほうが処理速度が速くなったりします?
0889デフォルトの名無しさん
2015/01/02(金) 20:47:41.40ID:ibIo6Doo> With使ったほうが処理速度が速くなったりします?
(まともに使えば)Yes.
0890デフォルトの名無しさん
2015/01/02(金) 20:48:31.05ID:buhXaHro眼科いけw
0891デフォルトの名無しさん
2015/01/02(金) 21:12:29.74ID:RfOBtX6rhttp://officetanaka.net/excel/vba/speed/s4.htm
0892デフォルトの名無しさん
2015/01/02(金) 21:50:35.59ID:Uo4jfJGTSelect Case Number
Case 889
MsgBox "ありがとう"
Case 890
MsgBox "あほ"
Case 891
MsgBox "ありがとう"
End Select
End Function
0893デフォルトの名無しさん
2015/01/02(金) 21:51:32.60ID:ibIo6Doo戻り値設定しろよ
0894デフォルトの名無しさん
2015/01/02(金) 21:51:59.98ID:Uo4jfJGT引数に名前を付けるにはどうしますか?
もともと組み込まれている
Range("A:A").Find What:="test", ........
の「what」みたいなやつのことです。
0895デフォルトの名無しさん
2015/01/02(金) 22:07:13.70ID:befzNVO8むしろ名前の無い引数なんて定義できないんだが
0896デフォルトの名無しさん
2015/01/02(金) 22:14:42.67ID:Uo4jfJGT× むしろ名前の無い引数なんて定義できないんだが
○ Functionの引数で定義した変数名がそのまま引数の名前になりますよ
0897デフォルトの名無しさん
2015/01/02(金) 22:16:25.86ID:Uo4jfJGTその本文(プロパティbody)にフォントを設定させたいんです。
どうすればいいですか?
とりあえずbodyのすべての領域で
「Arial」
「10ポイント」
を設定したい。
0898デフォルトの名無しさん
2015/01/02(金) 22:26:22.90ID:DH7mYziMご愁傷さま…
0899デフォルトの名無しさん
2015/01/02(金) 22:50:02.03ID:Uo4jfJGTSet objB = objA
のようにするとご存じのとおり同一のものを指してるだけになるからもしあとでobjBの中身を変更したらobjAも変更されちゃう。
そうじゃなくクーロンみたいに別物のコピーを作成したい。
0900デフォルトの名無しさん
2015/01/02(金) 23:00:06.56ID:befzNVO8名前の無い引数が「定義」できるなら、そのやり方教えてくれんかね
0901デフォルトの名無しさん
2015/01/02(金) 23:04:38.76ID:jTfiwI/aとかすればいいんじゃね
0902デフォルトの名無しさん
2015/01/02(金) 23:07:18.22ID:ibIo6Doo基本、そのオブジェクトに頼むしかない
中身はそいつしかわからんし
あと、オブジェクト 深いコピー あたりでググっておくことをおすすめする
0903デフォルトの名無しさん
2015/01/02(金) 23:25:24.62ID:befzNVO8なるほど
そもそも名前の無い引数定義したって、その関数本体で使えないからな
厳密にはそれArgsって名前ついてるけど
ParamArrayで定義すると名前付き引数形式で呼び出せない
配列の各要素には名前はない
ってことで、名前の無い引数を定義してるわけではないけど
まあ、ほぼ名前の無い引数だと思って良いかもしれんな
0904デフォルトの名無しさん
2015/01/02(金) 23:37:22.86ID:I0RnD+ziあなたはオブジェクトと言うものについて、ひょっとしたらよく分かっていないかもしれません。
そう言うことが出来るかどうかは、扱うオブジェクト側で決まることで、
操作側が決められることではありません。
0905デフォルトの名無しさん
2015/01/02(金) 23:52:43.23ID:UnzVlE4j浅いコピー・深いコピーの違いを知っている?
A{B}、B{C}
ABCをオブジェクトとして、Aの中の全メンバを、
単純にコピーすると、Bの参照がコピーされる(浅いコピー)
Bの中のCまでコピーしたいのなら、さらに再帰的にたどって、
コピーしていく(深いコピー)
何階層まで深くコピーしていくか、考えるべき
0906デフォルトの名無しさん
2015/01/03(土) 01:26:06.94ID:U8YCHJk10907デフォルトの名無しさん
2015/01/03(土) 01:26:48.48ID:V7Epa3Fo横からだけど
>〜〜中略〜〜かもしれんな
ありがとうって言おうよ
0908デフォルトの名無しさん
2015/01/03(土) 01:47:09.05ID:HjhZoqCE俺には>>903が譲歩しているように見えるがな
0910デフォルトの名無しさん
2015/01/04(日) 14:26:40.19ID:/gxPgUa3なんとかしてくれませんか
イライラします
0911デフォルトの名無しさん
2015/01/04(日) 14:43:58.85ID:WUO2qk/HVBAの参考書なんて買うような人には日本語じゃないと通じないでしょ
0912デフォルトの名無しさん
2015/01/04(日) 15:05:47.69ID:YkD/L/+Q0913デフォルトの名無しさん
2015/01/04(日) 15:18:07.98ID:lFfpcuGHまだWordが開いてなければCreateObject("WordApplication")
すでにWordが開かれていたらGetObject(, "Word.Application")
の呪文を唱えますが、
この条件分岐はどう書きますか?
0914デフォルトの名無しさん
2015/01/04(日) 15:19:27.19ID:lFfpcuGHUnko=, Manko=, Shikko=, Chinnko=, Seshiumu-san=、みたいな感じか?(ワラ
0915デフォルトの名無しさん
2015/01/04(日) 15:44:49.78ID:ARF0W7q8If 男.ち○こ.size > 20 Then
ここまで書いたがつまらん
0916デフォルトの名無しさん
2015/01/04(日) 15:55:40.40ID:lFfpcuGHIf 男.ち○こ.size > 20 Then
If 男.年収 > 8000000 Then
If 男.イケメン=True Then
彼女.結婚 場所:="ハワイ", 離婚慰謝料:=100000000
Exit For
End If
End If
End If
Next 男
0917デフォルトの名無しさん
2015/01/04(日) 17:53:02.59ID:/rCACZxcヘルプ理解できない素人しか買わない入門書だろ?
0918デフォルトの名無しさん
2015/01/04(日) 18:04:03.70ID:lFfpcuGHCreateObject("○○○")
この2つの違い、使い分け、etc.、はどうなっていますか?
0919デフォルトの名無しさん
2015/01/04(日) 18:11:24.12ID:lFfpcuGHDim a As Range
Dim b As Range
Set a = Cells(1, 1)
Set b = Cells(2, 1)
b = a
End Sub
こうやったら下のセルの値から上のセルの値にかわるだけで
書式類は一切受け継がれないのですが
それはどう実現しますか?
例えば上のセルにフォントが「メイリオ」、サイズが48、赤字に太字で、
下のセルはなにも書式を設定していないとき
下のセルも上のセルのように派手な書式にしたいけど値は「変えない」ようにしたいんです。
0920デフォルトの名無しさん
2015/01/04(日) 19:12:28.43ID:rmXjkuoF事前バインドか実行時バインドか
参照設定してるかしてないか
>>919
a.Copy
b.PasteSpecial Paste:=xlPasteFormats
0921デフォルトの名無しさん
2015/01/07(水) 04:38:20.73ID:P3oLcr3vもしくは、重複無しでランダムに全ての値を参照するにはどうするのが綺麗にできますか?
0922デフォルトの名無しさん
2015/01/07(水) 05:56:52.51ID:rfiFGjwL君が綺麗だと思う方法は、君にしか解らないよ
因みに大まかな傾向としては、俺はコード量は多くても、処理的に無駄がないものが綺麗だと思うが
初心者は本質的に無駄が多くても、コード量さえ少なければ綺麗だと感じることが多いようだ
0923デフォルトの名無しさん
2015/01/07(水) 13:01:57.89ID:HGDshGmE「配列の添え字」と「乱数」の配列を作り、それを乱数でソートしちゃう。 のが単純明快と思ってる。
で、1〜Nをランダムで並べた配列を返す。関数なり作っておくのも良いのではないだるおか
1〜Nのランダム配列を作り、NextValで次の値を返しEOFで終わるクラスなんかを作っちゃうのをお勧めする
0924デフォルトの名無しさん
2015/01/07(水) 13:16:02.90ID:HGDshGmEclass:
MyCls1KaraNMadeRandomDeKaesuyo()
public:
Sub Init(ByRef count As Long, Optional ByVal autoReload As Boolean = False)
Sub Reload()
Function CurrentVal() As Long
Function NextVal() As Long
Function EOF() As Boolean
0925デフォルトの名無しさん
2015/01/07(水) 14:17:24.53ID:dbIslmePOption Base 0で配列をaとする
Randomize
For i = UBound(a) To 1 Step -1
x = Int(Rnd() * i)
tmp = a(x): a(x) = a(i): a(i) = tmp
Next i
0926デフォルトの名無しさん
2015/01/07(水) 14:32:10.72ID:HGDshGmE実データの代入が重いデカい構造体とかでなけりゃあっさりだな。
(知らなかったなんて言えない・・・)
0927デフォルトの名無しさん
2015/01/07(水) 14:53:17.53ID:RijYyMWz0928デフォルトの名無しさん
2015/01/07(水) 15:26:33.82ID:i0B3psCp0929デフォルトの名無しさん
2015/01/07(水) 15:28:58.39ID:aspvvccdあれ、前の次スレ作った時に、板がおっこって残った残骸だよ
0930デフォルトの名無しさん
2015/01/07(水) 16:29:21.52ID:eMy/P6IAソートは良くてもO(n log n)になるから
>>925 のがいいよ。
実装合ってるかはよく見てないけど。
C++ならstd::shuffle。
0931デフォルトの名無しさん
2015/01/07(水) 16:59:07.36ID:mBi1+ULCこのスレ自体荒しが勝手にテンプレとった
もとのテンプレはこれ↓
Excel VBA 質問スレ Part32
http://toro.2ch.net/test/read.cgi/tech/1381151995/1
0932デフォルトの名無しさん
2015/01/07(水) 17:33:18.73ID:7MvMVdqpFor Eachか、せめてForで値取れるようにしろよ
0933デフォルトの名無しさん
2015/01/07(水) 17:37:58.65ID:FUg+sBMh0934デフォルトの名無しさん
2015/01/07(水) 22:09:32.79ID:59kVhZXe0935デフォルトの名無しさん
2015/01/07(水) 22:22:43.19ID:z7fkvQD+Excel VBA 質問スレ Part36 [転載禁止]©2ch.net・
http://peace.2ch.net/test/read.cgi/tech/1419718732/
0936デフォルトの名無しさん
2015/01/07(水) 22:28:43.39ID:0eah282z0937デフォルトの名無しさん
2015/01/08(木) 05:31:18.01ID:S33vpzXA早すぎるスレ立てしてたってだけの話だろw
コードOKはいいんだけど、最後の一文みたいにあそこまでやると流石にキモい
0938デフォルトの名無しさん
2015/01/08(木) 07:56:56.27ID:hoNDXFcBあれだけがんじがらめのテンプレで問題になってたのに全然懲りてないんだなw
0939デフォルトの名無しさん
2015/01/08(木) 09:39:57.44ID:oIh+D3uIこれ凄いなー
教えてくれてありがとう
0940デフォルトの名無しさん
2015/01/08(木) 18:19:42.18ID:C49kCY9s0941デフォルトの名無しさん
2015/01/08(木) 18:54:44.50ID:hoNDXFcB「テンプレ悔しいからはずす厨(荒らし)」
長すぎ。もっと短く名前を纏める力量無いの?
0942デフォルトの名無しさん
2015/01/08(木) 19:21:15.27ID:1Sly3QMm0943デフォルトの名無しさん
2015/01/09(金) 02:42:58.78ID:LHT/Hpmh保存先、ファイル名、用紙サイズ、を指定したい
可能ですか?何行ぐらいですか?
0944デフォルトの名無しさん
2015/01/09(金) 04:16:09.99ID:nDcq+xLwファイル名:
用紙サイズ:
↑これやっといて
4行だな。
0945デフォルトの名無しさん
2015/01/09(金) 08:13:46.92ID:kEHgW7lKなんだろうこれは
0946デフォルトの名無しさん
2015/01/09(金) 10:48:54.69ID:BcP6vX0h昨年12月のActiveX絡みの不具合を含んだWindowsUpdateが
今頃になって適用されたんじゃないの?
http://peace.2ch.net/test/read.cgi/bsoft/1418946875/142-162
この辺読んでみ
0947デフォルトの名無しさん
2015/01/09(金) 11:03:57.31ID:rJhs2R4+0948デフォルトの名無しさん
2015/01/09(金) 11:06:44.46ID:qnMsrJh90949デフォルトの名無しさん
2015/01/09(金) 12:15:23.36ID:kEHgW7lKんあー!
そういうことか
週明けにプログラム改修せんとなあ
0950デフォルトの名無しさん
2015/01/09(金) 16:50:15.65ID:GzFHQ3J40951デフォルトの名無しさん
2015/01/09(金) 16:54:14.73ID:qnMsrJh9操作可能なプログラムまたはバッチ ファイルとして認識されていません。
0952デフォルトの名無しさん
2015/01/09(金) 16:57:52.42ID:GzFHQ3J40953デフォルトの名無しさん
2015/01/09(金) 17:02:07.91ID:GzFHQ3J4Excel VBA 質問スレ Part36
http://peace.2ch.net/test/read.cgi/tech/1420790342/l50
0954デフォルトの名無しさん
2015/01/09(金) 17:30:12.57ID:BcP6vX0h重複&テンプレ改悪
こっちが次スレ
http://peace.2ch.net/test/read.cgi/tech/1419718732/l50
0955デフォルトの名無しさん
2015/01/10(土) 07:09:07.25ID:2VZ4g5kC順番に使って行けばいいやん。
みんな仲良くな。
0956デフォルトの名無しさん
2015/01/10(土) 07:40:23.57ID:6bumLq2NVariant型の3次元配列で
10*30*3
全部で要素数900のものを宣言して使いたいんですけど
この程度の大きさの配列は今のパソコンなら余裕で扱えるますか?
作ってから試せばいいんですけど
作り直すの大変なんで・・・w
0957デフォルトの名無しさん
2015/01/10(土) 08:02:15.62ID:+L1WIJZBそれじゃ抽象的過ぎて分からないよ。
せめてメモリどのくらい積んでる想定で、どの範囲のスコープで、
どんなシチュエーションで、どんなことをするのに使うのかくらい書かないと誰も分からないと思うよ。
ま、俺は書かれても分からないけどw
0958デフォルトの名無しさん
2015/01/10(土) 08:32:25.31ID:6bumLq2Nじゃメモリが4GB・・・もしかしたらXPで2GBしかないかもしれない
一応7で4GBとするかな
会社のノーパソなんでちょっとわからない、というか複数あるから全部は把握出来てない
プロシージャレベルの変数で
格納する値は1文字か2文字ぐらいの文字か数値で
配列内で部分的に値を交換したりまたは値を変えてから
別のブックのシートにある規則でその値を並べていくみたいな・・・
配列内での操作はそれほど複雑な事はしないですね
0959デフォルトの名無しさん
2015/01/10(土) 08:42:56.85ID:0yQpyAUx900*1Kでも1MBすら超えないし。
せめて100MBくらいは超えてもらわないと。
0960デフォルトの名無しさん
2015/01/10(土) 08:47:56.82ID:6bumLq2Nさんくす
その程度なら安心して使えるわ
さてと・・・コーヒー入れてから組むかな
0961デフォルトの名無しさん
2015/01/10(土) 09:06:05.24ID:cL18jX+cこっちが仲良くしたくても
制約の多いテンプレ書く奴がそれを盾にして
スレ違いだなんだと和を乱すんだよ
0962デフォルトの名無しさん
2015/01/10(土) 09:25:56.48ID:rLgznmkm> 検討するだけ時間の無駄。
恐ろしいことに 32KB 制限とか残ってるから、安心しちゃダメ
http://app.m-cocolog.jp/t/typecast/703306/587175/78029000
0963デフォルトの名無しさん
2015/01/10(土) 09:42:35.45ID:OkgbdJUdちょうど昨日ユーザ定義型に1万行くらいのテキスト読み込むマクロ書いたが
配列だったからセーフだったのか
0964デフォルトの名無しさん
2015/01/10(土) 09:43:38.48ID:7eyavD7cちょ、おまW
そういうことかW
やり過ぎじゃないか?いいんだけどさW
0965デフォルトの名無しさん
2015/01/10(土) 10:03:18.76ID:rLgznmkm配列が固定長でないと実体は別に取るみたいで大丈夫だったと思う
0966デフォルトの名無しさん
2015/01/10(土) 10:37:02.56ID:EQ6T3P4r0967デフォルトの名無しさん
2015/01/11(日) 20:27:34.18ID:Xvd9oSuAその命令文、うちのとこにはないんでコンパイルエラーです。個人事務所なので。orz
0968デフォルトの名無しさん
2015/01/11(日) 20:28:13.28ID:Xvd9oSuA0969デフォルトの名無しさん
2015/01/11(日) 21:32:31.18ID:3ahz/Tk9依頼先を自分にしとけばいいだけ
0970デフォルトの名無しさん
2015/01/11(日) 21:47:30.72ID:NXCI7i7k手元にExcel無いので試せないが。
0971デフォルトの名無しさん
2015/01/11(日) 22:35:50.62ID:3ahz/Tk9pdf の制御ってなんだ?
できるのは、pdf として保存することだけだよ
0972デフォルトの名無しさん
2015/01/11(日) 23:33:39.95ID:0AZSz2T3のサンプルを
Excel-DNA 0.32
R.net 1.5.13
R 3.1.2
で動かしてみたんだけど、Excel側で配列数式の取得でエラーになる。
CreateInstance→GetInstanceの変更はやったんだけど、
他になにか要修正箇所の見落としがあるかな?
0973デフォルトの名無しさん
2015/01/11(日) 23:43:29.45ID:42fc/CwK0974デフォルトの名無しさん
2015/01/12(月) 00:00:51.49ID:ZfT7U18/0975デフォルトの名無しさん
2015/01/12(月) 00:15:23.00ID:1B7gFgUM職場のパソコンでインターネット見ながらやってみよ
0976デフォルトの名無しさん
2015/01/12(月) 00:16:14.31ID:M4h8f6U2pdf保存のオプションを指定するのをマクロ記録出来るかなって意味だった。
用紙のサイズ、向き、画像の圧縮程度なんかを指定するのを記録すると、指定内容をvbeで見られるんじゃないかと。
0977デフォルトの名無しさん
2015/01/12(月) 00:51:55.34ID:ZfT7U18/それはマクロに記録されない
0978デフォルトの名無しさん
2015/01/12(月) 01:01:46.45ID:ZfT7U18/1つ目が品質だけど2段階しか選択できない
用紙サイズはページ設定の方で変更できるんじゃないかな(面倒なので未確認
Quality:=xlQualityStandard
IncludeDocProperties:=True
IgnorePrintAreas:=False
OpenAfterPublish:=True
0979デフォルトの名無しさん
2015/01/13(火) 19:03:18.51ID:tLThP+VFもちろん複数セル対応です。
つまり例えば10セルx10セルの四角のエリアの外周に罫線がひかれてあれば
このエリアは色で塗りつぶします。
もし一か所でも罫線がとぎれていれば色は塗りません。
0980デフォルトの名無しさん
2015/01/13(火) 19:37:05.77ID:cjipnmCJ罫線が途切れているかどうか調べて
閉じていたら色塗ればいいんじゃないか?
0981デフォルトの名無しさん
2015/01/13(火) 19:40:58.81ID:jCKL88FP長方形限定にでもしない限り死ぬ
0982デフォルトの名無しさん
2015/01/13(火) 20:02:50.58ID:J1+7YGd10983デフォルトの名無しさん
2015/01/13(火) 20:04:46.16ID:cjipnmCJ単純に罫線を順番に追っかけて行けば
いいんじゃないか?
0984デフォルトの名無しさん
2015/01/13(火) 20:34:55.53ID:qLgVOx4Gとしてシート内の全てのセルを彷徨うことになりそう…
0985デフォルトの名無しさん
2015/01/13(火) 20:57:00.43ID:SDwxRg+Vhttp://fussy.web.fc2.com/algo/algo3-1.htm
開始位置より左上にある罫線が、開始位置を含んで閉じていなければ
塗りつぶさなくて良いと判断できそう。
0986デフォルトの名無しさん
2015/01/13(火) 22:05:50.48ID:hfw/WUnW0987デフォルトの名無しさん
2015/01/13(火) 23:15:06.03ID:jCKL88FP▼がスタート地点として、塗りたい部分がこんな風に入り組んだり枝分かれしてると判定が地獄になる
□▼□□□□□□□
□■□■■■■■□
□■□■□■□■□
□■□■■■□■□
□■□□□□□■□
□■■■■■■■□
□□□□□□□□□
0988デフォルトの名無しさん
2015/01/14(水) 06:13:29.07ID:TcHIrr8h0989デフォルトの名無しさん
2015/01/14(水) 06:27:58.00ID:1MKny6omあとはコードを書く面倒さと、毎回手動で確認して塗りつぶす面倒さの
どちらを避けたいか自分で判断すればいいだけじゃね?
まぁ此処には、製作依頼NGにしようとすると発狂するくらいコード書きたくて
ウズウズしてる奴が居るから、方法論の質問ではなく製作依頼ですって言えば
誰かが書いてくれるはずなので、誰かに書かせちゃうのも一つの手だけど
0990デフォルトの名無しさん
2015/01/14(水) 06:51:35.15ID:IFDWIC1X任意のセル範囲に同じ文字列を設定したい場合、どうすれば良いですか?
0991デフォルトの名無しさん
2015/01/14(水) 09:37:41.65ID:H5VD+o7q今日、久しぶりに自作のVBAを実行したら、
「プログラミングによる Visual Basic プロジェクトへのアクセスは信頼性に欠けます」
って出ました。オプション設定でこのメッセージを出さないようには
出来たのですが、自作プログラムは以前に作ったやつだし、最近特に何も
変更していないし、WindowsUpdateもしていないにも関わらず何故急にエラーメッセージが
出始めたのか分りません。何故でしょうか?
0992デフォルトの名無しさん
2015/01/14(水) 18:18:46.50ID:/eGDVYKFコピペは複数セルに有効
例えばA1だけをコピー、B1:E10を選択してペーストすれば、すべて同じA1の内容が選択した全セルに貼り付けられる
0993デフォルトの名無しさん
2015/01/14(水) 19:02:14.34ID:Xuc5GVH90994デフォルトの名無しさん
2015/01/14(水) 20:04:54.99ID:O3zd6KXi0995デフォルトの名無しさん
2015/01/14(水) 20:05:05.89ID:tAU6sHPw時代の流れ
0996デフォルトの名無しさん
2015/01/14(水) 22:36:14.78ID:dKSp9BALエラー処理ルーチンの勉強してるんだけど
エラー起こそうとinteger型にString型代入しても大丈夫なんで困るわ
別の関数を呼んでそこで型不一致の代入させるとエラー起きるって気づくのに時間かかった
0997デフォルトの名無しさん
2015/01/14(水) 22:57:41.02ID:NzDEuWG20998デフォルトの名無しさん
2015/01/15(木) 05:46:06.19ID:su00TD7y0999デフォルトの名無しさん
2015/01/15(木) 09:35:47.65ID:9RvUPi7WExcel VBA 質問スレ Part36
http://peace.2ch.net/test/read.cgi/tech/1419718732/l50
1000デフォルトの名無しさん
2015/01/15(木) 09:36:31.66ID:9RvUPi7WExcel VBA 質問スレ Part36
http://peace.2ch.net/test/read.cgi/tech/1419718732/l50
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。