[過去ログ] VBAなんでも質問スレ Part2 [転載禁止]©2ch.net (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
302(2): 2017/04/21(金)22:18 ID:TpPjDerb(2/2) AAS
>>300
Dictionaryのkeyにすれば良いんじゃね
303: 2017/04/21(金)22:25 ID:9tskJEPF(2/2) AAS
CollectionよりDictionaryだな、確かに
304(1): 2017/04/21(金)23:24 ID:3F+Ljh12(1) AAS
そういう質問、初心者によく聞かれるわ
普通は配列を使えと教えるもんだが
305: 2017/04/22(土)06:16 ID:zUhE/Mll(1/5) AAS
>>302
>>301
ありがとうございます。Collection Dictionary 調べてみましたが
どちらも説明をざっと読んでも使い方が理解できませんでしたが挑戦してみます。
phpのように (aaa & no) =
と変数名自体を複数の変数で合成する事は出来ないのですね。
306(2): 299 2017/04/22(土)08:27 ID:zUhE/Mll(2/5) AAS
>>300
>>301
>>302
>>304
aaa1=「状況に応じて変化する数値1」
aaa2=「状況に応じて変化する数値2」
aaa3=「状況に応じて変化する数値3」
・
・
すみません説明を単純にするために「例文1」としてましたが
変数に格納されるのは状況に応じて変化する数値(他の集計の計算結果)でした。
固定された文言であればDictionary keyで処理できるというのはわかりましたが
格納されている物が変化する数値の場合かつ
変数名を数字で管理(他の集計から3という結果が出たら→aaa3が適応されるみたいな)
したい場合こういうことを実現する方法はありますでしょうか?
307(1): 2017/04/22(土)08:53 ID:MM2jcjjz(1) AAS
>>306
変数名を数字だけで管理する方法はない。
VBAの仕様上、できない。
というか、その集計結果なるものがプログラム実行時に決定するのだとしたら、集計結果を格納する変数の名前に集計結果の数値をはじめから盛り込もうとするのは無理があるし、そもそも理由が分からない。
やりたいことを実現するにはもっと適切な他の方法があるんじゃないかな。
308(1): 2017/04/22(土)11:27 ID:6RXuRSFv(1) AAS
>>306
Dictionaryのvalueは変更可能
309: 299 2017/04/22(土)15:29 ID:zUhE/Mll(3/5) AAS
>>308
>>307
理解するのにかなり時間がかかりましたがDictionaryなんとなくわかりました。
これって Dim とかPublicとかの変数とは別に存在できるんですね。
全く未知の分野ですが使ってみます。ありがとうございました。
310(2): 2017/04/22(土)20:43 ID:zUhE/Mll(4/5) AAS
Dim dic As New Dictionary
Dim i As Integer
dic.Add "キー1", "アイテム1"
dic.Add "キー2", "アイテム2"
dic.Add "キー3", "アイテム3"
Dictionaryで指定した"キー"と "アイテム"は処理が終了するとリセットされるようですが、
グローバル変数のように処理が終了しても次実行されるまで記憶させておくようにする事は出来ないのでしょうか?
311(2): 2017/04/22(土)22:48 ID:AOzJBbd9(1) AAS
>>310
プロシージャを跨いで値を保持させるなら、グローバルな配列変数、(アプリケーションがExcelならば)セル、シェイプ、カスタムドキュメントプロパティ、グローバルコレクション、自作のグローバルクラスのインスタンスなどに値を記憶させるしかない
でもそれならわざわざプロシージャ内でDictionaryを使って連想配列を操作するより、ExcelのセルにKeyと値を書き込んで配列アクセスして読み書きする処理の方が遥かに楽だと思う
312(2): 2017/04/22(土)23:30 ID:zUhE/Mll(5/5) AAS
>>311
ありがとうございます。
今作っているコードでセルへのアクセスが膨大になってきて処理時間がどんどん長くなる傾向がみられまして
全操作をセルにアクセスせずに完結させようと色々考えていましたがなかなかそうはいかないようですね。
313: 2017/04/23(日)05:30 ID:t5ve42Di(1) AAS
>>312
Dim dic As New Dictionary
の宣言を何処でしているかによるんじゃね?
314: 2017/04/23(日)10:16 ID:wfwXXeKO(1) AAS
>>312
標準モジュールとかでDictionary型のオブジェクト変数をグローバルスコープ(Public)でNew宣言すれば、処理を抜けてもDictionaryのItemは初期化されないんじゃないのかな
ただ単なる配列の処理でデータが数千件程度なら、描画止めた状態でワークシート使った方が遥かに楽だと思うが。
315(1): 2017/04/23(日)16:51 ID:fs201BJ1(1/2) AAS
>>311
引数に渡すってのを忘れてるぞ。
一番使われてるんじゃないか?
316(1): 2017/04/23(日)17:11 ID:yvJyPXpi(1/2) AAS
>>315
何の引数に渡すことを指してるのかな?
317(1): 2017/04/23(日)18:02 ID:fs201BJ1(2/2) AAS
>>316
プロシージャを跨ぐって話だろ。
別のプロシ−ジャに引数として渡せば形の上ではそれぞれのローカル変数でも値は保持されるだろ。
318: 2017/04/23(日)18:27 ID:yvJyPXpi(2/2) AAS
>>317
>>310を読んでなんとなく、一個のルーチンのプロシージャ間の値の受け渡しの話ではなく、ルーチン内で一度AddしたDictionaryのKeyとItemを何らかの形で保存して、同じルーチンを再実行したときにKeyとItemを再利用することが出来るかどうかという話だと思ったんだが
まぁ、オブジェクトプロパティへの値の保存も実際はそのオブジェクトを定義してるクラスのメソッドに引数を渡してるのと同じだから、変わらないといえば変わらないけど
319(1): 2017/04/28(金)17:33 ID:krqKI6DB(1) AAS
超既出FAQですな。
『Public 宣言された変数の有効期間』
外部リンク:support.microsoft.com
簡単に言うと、メソッド実行中以外はいつでもpublic変数はクリアされうるから、値が残っていることを期待したマクロを書くなってこと。
320: 2017/04/28(金)19:14 ID:AZuqyiJa(1) AAS
>>319
俺は使う時にクリアされてるかチェックしてクリアされてたら再設定するようにしてるな。
値が0だったら値を取得するFunctionを呼び出すって感じ。
321(1): 2017/04/28(金)22:13 ID:A3VkBONm(1) AAS
Publicな静的変数は使わない。
エクセルのセルとかワードの文書変数とかの規定オブジェクトにデータを書き込んだ方が便利
322: 2017/04/29(土)02:16 ID:2iGvQ1xG(1) AAS
>>321
いや、それは格好悪いんじゃね?
セルを使ったりCustomDocumentPropertiesも使うけど、それに合ったものだから使うわけでPublic変数に合ったものもある。
適材適所だろ。
323(1): 2017/05/25(木)20:51 ID:yS9f0RVc(1) AAS
ontime で実行するプロシージャって標準モジュールに書かないとあかんのか。
このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。って出た。
324(1): 2017/05/25(木)21:07 ID:JTnnq+Q0(1) AAS
>>323
スコープ
普通にCallで呼び出せる場所にないと実行できないのは、どの方法でも同じ
325(1): 2017/05/26(金)00:03 ID:Fw61rXsb(1/2) AAS
>>324
ThisWorkBookのモジュールからOnTimeでThisWorkBookのモジュール内のPrivate Sub を予約したんですが・・・これじゃ駄目なんですかね?
326: 2017/05/26(金)23:19 ID:Fw61rXsb(2/2) AAS
>>325です
OnTimeで実行予約するプロシージャを標準モジュールに移動したら動くようになりました〜
327(1): 2017/06/05(月)21:02 ID:bd1ggU41(1/3) AAS
特定の文字が含まれているセル(複数ある)を検索し、
検索されたセルを含む行全体(Entirerow)を同時選択する方法
以上お願いします。
328(1): 2017/06/05(月)21:06 ID:bd1ggU41(2/3) AAS
その文字を含むセルを、行ごと削除したり、行ごとコピーしたりと、いろいろしたいので質問致しました。
329: 2017/06/05(月)21:25 ID:nSGQpg3a(1) AAS
鮮やかな丸投げっぷりにワラタ
作成依頼OKな Excel VBAスレと間違えてない?
330: 2017/06/05(月)21:31 ID:tRFV5HQ5(1) AAS
>>328
とりあえず、複数行を選択するところをマクロの記録で見てみたら?
ctrlキー押しながら選択するのとshiftキーを押しながらのとで。
331: 2017/06/05(月)21:41 ID:jKyX/qwq(1) AAS
検索対象のセル範囲でForループを回す
セル値に特定文字を含むセルが見つかる度にEntireRowを取得して変数に入れるかUnionで選択対象の範囲をマージしていく
ループ終了後にSelectする
以上
上下前次1-新書関写板覧索設栞歴
あと 671 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.023s