エクセルのVBAについて質問させてください。
フォームにtxt1.text~txt14.textがあります。
cmdDSをclickしたときに空値をセット(= "")したく、今は下のようになっています。
private sub cmdDS_click()
txt1.text = ""
txt2.text = ""
…
end sub
ですが、1~14という数字以外はすべて同じ文であることから数字の部分だけを入れ替えるようにし、loopのようなものを使ってもっと簡単にできないでしょうか?
マクロを組めば必然的にファイルのサイズが大きくなってしまうと言うことはわかっていますが、サイズを抑えるためにできることやそう言ったことについてのHPなどがありましたら併せて教えていただきたいと思います。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
こんにちは。
>フォームにtxt1.text~txt14.textがあります。
txt1とかいうのは何ですか? TextBox のことですか?
フォームとは何ですか? UserForm ですか?
Form ツールのフォームには、TextBox とは呼びません。
Excelの場合は、できる限り標準名称を使用してください。オブジェクトの名前自体をVBのコントロールの名称にわざわざ書き換えているようですが、書き換えの手間とか面倒になると思います。なお、VBなら、コントロール配列を使えばよいと思います。また、Excelのこの種のコントロールで擬似的なコントロール配列は、あまり賛成できません。
一応、UserForm のTextBox とさせていただきます。
UserForm 場合
For i = 1 To 14
Me.Controls("Txt" & i).Text = ""
Next
>マクロを組めば必然的にファイルのサイズが大きくなってしまう
基本的に誤解があるように思います。
私は、Excelの使用メモリを減らすために、マクロを組みます。特に、Mode 関数や Frequency 関数のような配列を使うと、大きなファイルでは、とても、そのままでは使えませんので、その代わりに、マクロに切り替えます。また、アドインにすることにり、マクロ部とデータ部と切り離すなど、いくつかのテクニックがあります。
少し、話を膨らませて、個人的なことも書かせてもらいます。
Excelというものは、基本的にはファイルサイズの限界というものは、明確には仕様には出ていません。しかし、Excelを使用するキャッシュ・メモリがあるわけで、それは、私たちが想像するよりもはるかに小さいのです。マクロは、ファイルを開き、セキュリティ・パスが通れば、中間言語にコンパイルされます。その中間言語のファイルのストックの大きさには、当然限界はあるのですが、ファイルサイズとの直接の関係があるとはいえません。間接的には、他のメモリに押しやられることはあるかと思います。
サイズを抑えるというよりも、まずワークシート全体のメモリ管理をしなくてはならないのです。
マクロについては、「マクロの最適化」という名称で、マイクロソフトのサポートのライブラリに残されていますし、私もその内容については、ここの掲示板に書いたことがありますが、多くの方がは、それを重要視しません。しかし、ある程度のVBAに精通している方であれば、この基本的なルールをご存知ないとすれば、とても残念なことだと思います。そのルールに当てはめれば、正しいか正しくないか一目瞭然のはずなのです。
VBAコードを最適化する
http://msdn.microsoft.com/library/ja/default.asp …
詳しい内容は、『Microsoft Office プログラマーズガイド』の中にあります。(私の所有しているものは、Office 97とOffice 2000)
Office Tanaka でも、少し書いてありますが、こちらは、内容的に、それがそのまま応用できるわけでもなければ、その実験がそのまま実務で使えるわけでもありません。この方の原則を踏襲している人もあるようですが、おかしなコードになりやすいように思います。たとえば、シートをIndex で呼び出すというのは、現実的ではありません。
Office Tanaka
http://www.officetanaka.net/excel/vba/speed/inde …
なお、補足として、ワークシートのメモリを減らす方法として、以下があります。
[XL] メモリを節約するワークシートの作成方法
http://support.microsoft.com/kb/401704/ja
不備ばかりの質問で申し訳ありませんでしたが、回答ありがとうございました。
サイズについては理解するのにまだ時間がかかりそうですが、
マクロはお陰様で組むことができました。
本当にありがとうございました。
No.4
- 回答日時:
こんばんは。
#2の回答者です。割り込みさせていただきます。
ただし、UserFormを条件とします。
>If Left$(ctrl.name, 3) = "txt" Then ctrl.Text = ""
>If Left$(ctrl.name, 2) = "op" Then ctrl.Value = False
そういう形にするなら、普通は、オブジェクト型を取って処理すれば良いのでは?
ただし、Optionボタンを、あえてすべてFalse にするという考え方自体はヘンですが。
Dim ctrl As Control
For Each ctrl In Me.Controls
If TypeOf ctrl Is MSForms.TextBox Then
ctrl.Text = ""
ElseIf TypeOf ctrl Is MSForms.OptionButton Then
ctrl.Value = False
End If
Next
No.3
- 回答日時:
3つの場合((テキストボックスも、フォームも、フォームへD&Dしてから名前を変えてない場合。
)全部初期化かクリアする方法
Private Sub CommandButton1_Click()
For i = 1 To 3
’UserForm1.Controls("TextBox" & i).Text = "aa" '初期化
UserForm1.Controls("TextBox" & i).Text = "" 'クリア
Next i
End Sub
ーー
#1のオプションボタンの場合
Frameを普通使うと思うが、使わない場合の例
Private Sub CommandButton1_Click()
UserForm1.OptionButton2.Value = True
MsgBox "A"
For i = 1 To 3
UserForm1.Controls("OptionButton" & i).Value = False 'False
Next i
End Sub
上2行はテスト確認の為に入れている。
グループ化したオプションボタンのOnのもの1つをOffにすればよいが
無駄をして、3つともOFFにしている。
ーー
http://www.hisystec.co.jp/VBAroom/VBA08.html
を参照
Frameを普通使うと思うが(下記はFrameが2つ、オプションボタン各3つの例)
AAが表示された瞬間でOnになっていることを確認し、OKをクリックで消える(Offになる)ことを確認してください
Private Sub CommandButton1_Click()
UserForm1.Frame2.OptionButton5.Value = True
MsgBox "AA"
For i = 4 To 6
UserForm1.Frame2.Controls("OptionButton" & i) = False
Next i
End Sub
No.1
- 回答日時:
以下は一例です。
フォーム上のコントロールを検索して、名前の左3文字が "txt"なら内容をクリアします。
※"UserForm1"はフォーム名なので、お使いのフォーム名に直してください。
Private Sub CommandButton1_Click()
Dim ctrl As Control
For Each ctrl In UserForm1.Controls
If Left$(ctrl.Name, 3) = "txt" Then
ctrl.Text = ""
End If
Next
End Sub
ありがとうございました。
お礼に書こうか補則に書こうか悩んだのですが、
同じ方法でオプションボタンをfalseにできないでしょうか?
(同じコマンドボタンをクリックしたときの動作としてです。)
Dim ctrl As Control
For Each ctrl In (4)Form予定入力.Controls
If Left$(ctrl.name, 3) = "txt" Then ctrl.Text = ""
If Left$(ctrl.name, 2) = "op" Then ctrl.Value = False
End If
Next
こうかな?と思ったのですが、
テキストを空値にすることしかできませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別のパソコンでエクセルのマク...
-
エクセルマクロ実行中に別ファ...
-
昨日まで動いていたエクセルの...
-
エクセル終了時の保存確認メッ...
-
エクセル2013vbaで、見えない名...
-
Excelが勝手にシート移動してし...
-
複数のpowerpointのファイルを...
-
マクロを設定したのに、拡張子...
-
エクセルマクロを有効にしない...
-
マクロでマクロを削除する
-
VBAを一度起動するとずっと出て...
-
excelファイルに使われているVB...
-
エクセルファイルを自身のファ...
-
Adobe Reader を閉じる
-
EXCELマクロコードを、それを含...
-
Excel>マクロを使っていないは...
-
マクロを消すマクロは不可能?
-
エクセルのマクロで保存して終...
-
個人用マクロブックにマクロを...
-
【マクロ】エラーが発生⇒実行時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを一度起動するとずっと出て...
-
コピーしたファイルのマクロを...
-
エクセル終了時の保存確認メッ...
-
excelファイルに使われているVB...
-
昨日まで動いていたエクセルの...
-
VBA マクロ実行時エラー’1004Ra...
-
EXCEL マクロ クリップボードク...
-
マクロを消すマクロは不可能?
-
別のパソコンでエクセルのマク...
-
Excelが勝手にシート移動してし...
-
アクセスでファイルを開いたと...
-
エクセルファイルを自身のファ...
-
外部データを取り込むマクロ
-
Excelマクロ ファイル名が変わ...
-
エクセルマクロ実行中に別ファ...
-
エクセル2013vbaで、見えない名...
-
【マクロ】エラーが発生⇒実行時...
-
サクラエディタのマクロ設定を...
-
EXCELマクロコードを、それを含...
-
エクセルマクロを有効にしない...
おすすめ情報