[過去ログ] VBAなんでも質問スレ Part2 [転載禁止]©2ch.net (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
291(1): 2017/04/10(月)04:05 ID:sRLMXvmn(1) AAS
>>287
しかもEndやErrorで抜けたら破棄されるという罠
292(1): 2017/04/11(火)00:40 ID:egN7ZnVO(1) AAS
素数や組み合わせ爆発のような数学の迷宮的な問題に陥って
一生かかってもコードを完成させるのは無理ですよみたいな場合もあるのでしょうか?
293: 2017/04/11(火)10:41 ID:Ei1BFwyD(1) AAS
>>292
数学的バックグラウンドがなければコードが書けないという類いの問題はあるね。
たとえばNP困難なやつ。
巡回セールスマンとかナップサック問題とか、ナーススケジューリング問題とか。
自力でなければ、それなりの回答が得られる解法(コード)が既に存在してるものもある。
294: 2017/04/11(火)11:01 ID:o/k96Ri6(1) AAS
問題を解く方法を考案するのと、その方法をコンピューター言語に翻訳する作業は別ですわ
それぞれに異なった知識と才能が必要となりますので
295: 2017/04/11(火)11:03 ID:6dnWkPrh(1) AAS
>>291
End Subの行にブレークポイント、これ
296: 2017/04/12(水)22:41 ID:iuenojzm(1) AAS
パブリック変数で
1000個
10000個でも平気だっり?
とかどんな拷問なんだよw
297: 2017/04/20(木)23:26 ID:92wBssf5(1) AAS
テストしてみたがパブリック変数500個は問題なく動いた。
もっと使ってる人いる?
298: 2017/04/21(金)19:40 ID:TpPjDerb(1/2) AAS
いらない
299(3): 2017/04/21(金)21:22 ID:BWuBR5xw(1/2) AAS
変数の一部を変数にする事は出来ないのでしょうか?(代入
とかではなく)
たとえば↓はイメージですが変数名の箇所を文字列をつなぎ合わせる時と
同じように変数をわりあてられないのでしょうか?(以下は動きませんがphpではこれができます。)
dim aaa1
dim aaa
dim no
dim bbb
aaa1=例文1
aaa=aaa
no=1
aaa & no = bbb
msgbox bbb
↓
結果は「例文1」 と表示されますみたな、、
300(3): 2017/04/21(金)21:28 ID:BWuBR5xw(2/2) AAS
>>299
最終的には
aaa1=「例文1」
aaa2=「例文2」
aaa3=「例文3」
・
・
とし
aaa & no のno番号だけ差し替えて制御するみないな感じで使います。
ただしnoの番号は連続した数字ではなく他の集計結果からランダムに発生するため
ループ処理等では成り立たず変数のように扱う必要があります。
301(2): 2017/04/21(金)22:10 ID:9tskJEPF(1/2) AAS
>>300
aaa1とかaaa2を変数として捉えず、文字列と数値を要素に持つ2次元配列と見れば良い
で、データ全体を制御するときは、aaa1,aaa2...の2次元配列全てを要素として持つコレクションオブジェクトを生成して操作する
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を呼び出すって感じ。
上下前次1-新書関写板覧索設栞歴
あと 682 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.018s