• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:指定範囲の間のセル範囲を出す VBA)

指定範囲のセル範囲を出す方法

このQ&Aのポイント
  • VBAを使用して、指定範囲の同じ列のセル範囲を出す方法について質問しています。
  • 例えば、TEST(0)には"B6:B13"が入っており、同じ列のセル範囲を出したいと考えています。
  • 引き算ではなく別の方法が必要なようですが、良い方法があれば教えて欲しいとしています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

こんにちは。 >StringやVariantは2GBまでとありました。 >この場合単純計算で10万文字書けるという考えで >良いのですよね?(もしかしたら計算違いかもしれません) 私の計算でも、同じです。 昔、試したことがありますが、思いの外、取れました。 本来は、データ型を指定したほうが、大きく取れるようですが、必ずしもうまくいくとは限りません。 お分かりになっていることだと思いますが、それは、Variant型でないといけない時があります。 >その場合、SPLIT後、String型やVariant型に保存し、 >セルに書き出すプログラムを書こうと思ってます! こちらの方は、試していませんが、なんとかなると思っています。 >>で検索し、いくつか、CLSID(クラスID)が出てきます。 >ひとつしか出てきませんでした。 >また、(既定)しかありませんでした。 >何か使い方がおかしいのでしょうか? いいえ、ふつうの人は、ひとつだけのはずです。私が今使っている、Win7 には、プログラミング言語は、MSC とか、VB.Netとかあるのですが、今は、Turbo C しか入れていないつもりでいるのですが、それでも、いろいろ入っているらしいのです。もう、あれこれ手を出すのは止めにしたいと思っていますのに、つい、VBAに戻ってきてしまいました。Office 2003は、アンイストールしたのですが、残骸が残っている上に、新たにVB6 Runtimeを入れてしまいました。そのせいだと思います。 それはともかく、ブランクがあってVBA関数などは忘れても、基本的なところは忘れていないものなのですね。

satoron666
質問者

お礼

回答ありがとうございます! >こんにちは。 こんにちは! >私の計算でも、同じです。 >昔、試したことがありますが、思いの外、取れました。 >本来は、データ型を指定したほうが、大きく取れるようですが、必ずしもうまくいくとは限りません。 >お分かりになっていることだと思いますが、それは、Variant型でないといけない時があります。 Variant型で無いといけないときが特に思いつきません…うーん、なんでしょう? >>その場合、SPLIT後、String型やVariant型に保存し、 >>セルに書き出すプログラムを書こうと思ってます! >こちらの方は、試していませんが、なんとかなると思っています。 では、この方法で色々変更していきたいと思います^^ >いいえ、ふつうの人は、ひとつだけのはずです。私が今使っている、Win7 には、プログラミング言語は、MSC とか、VB.Netとかあるのですが、今は、Turbo C しか入れていないつもりでいるのですが、それでも、いろいろ入っているらしいのです。もう、あれこれ手を出すのは止めにしたいと思っていますのに、つい、VBAに戻ってきてしまいました。Office 2003は、アンイストールしたのですが、残骸が残っている上に、新たにVB6 Runtimeを入れてしまいました。そのせいだと思います。 そうでしたか。 すごいですね・・・色々出来るんですね! 私はVBAもままならないですが…VBAから幅を広げ、どんどん便利なものを作れるようC言語とかも勉強したいと思います! >それはともかく、ブランクがあってVBA関数などは忘れても、基本的なところは忘れていないものなのですね。 そうですね!私もExcelの関数(便利な部分?)とか、ちゃんと覚えてますね^^ ありがとうございました!

その他の回答 (2)

回答No.2

こんにちは。 >物理的に動かし?間を考えるのですね! 昔、そんなことをやった覚えがあるので、今回もその手法を使ったまでです。 これは、ソートした時に、手では順に選べるのに、なぜ、マクロでは出来ないか考えた時のアイデアが発端です。 >レジストリエディタをいじると書いてありますが、そこまでしないと使えないものなのですか? セキュリティの強化された時に、「信頼されていません」の警告が出るようになったようですね。 私がやっていた時代にはありませんでした。もともと、Accessでは、様々なコントロールを使わざるを得なくて、覚えました。今回は、失礼しました。 その上で、レジストリをいじるのは無理ですか? http://www.ka-net.org/office/of13.html ここには、Winsoc だけで、他については詳しく書かれていませんが、 手順としては、RegEdit を立ち上げて、 Rich TextBox Control で検索し、いくつか、CLSID(クラスID)が出てきます。 例: \HKEY_CLASSES_ROOT\CLSID\{B617B991-A767-4F05-99BA-AC6FCABB102E} \HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402} そうしたら、 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX\Compatibility\ の中で、どちらか該当するものがひとつあるはずですから、それが出てきたら、 右クリックで、データの変更を選び、DWORDの部分で、 16進の部分が、[00000400 ] になっているはずですから、 それを、[0] にして上げれば、それで警告がなくなります。 他の方法というか、前回書いたように、本来は、変数内で処理してしまい、その後、ワークシートに、吐き出せばよいです。そっちのほうが、ずっと簡単ですけれど、私は、途中からの参加で、TextBox 自体を使う経緯を知らなかったので、こういうRich TextBoxという話の方向になってしまったのです。

satoron666
質問者

お礼

回答ありがとうございます! 色々プログラムを組まれているみたいで 尊敬します^^ 私ももう少し上手く組めるようになりたいところです… >手順としては、RegEdit を立ち上げて、 >Rich TextBox Control >で検索し、いくつか、CLSID(クラスID)が出てきます。 ひとつしか出てきませんでした。 また、(既定)しかありませんでした。 何か使い方がおかしいのでしょうか? >他の方法というか、前回書いたように、本来は、 >変数内で処理してしまい、その後、ワークシートに、吐き出せばよいです。 >そっちのほうが、ずっと簡単ですけれど、 >私は、途中からの参加で、TextBox 自体を使う経緯を知らなかったので、 >こういうRich TextBoxという話の方向になってしまったのです。 いえいえ!私の説明不足だと思います。 色々抜けることがあるので^^; 変なことを聞くかもしれませんが、 StringやVariantは2GBまでとありました。 この場合単純計算で10万文字書けるという考えで 良いのですよね?(もしかしたら計算違いかもしれません) その場合、SPLIT後、String型やVariant型に保存し、 セルに書き出すプログラムを書こうと思ってます! 色々参考になりました^^ありがとうございます!

回答No.1

こんにちは。 >引き算ではダメですよね(Stringのため いいえ、String型とかは関係なく、アイデアとして悪くはないのですが、もっと物理的な方法があるように思っています。あまり数学的に考えても、ややこしくなるような気がします。Excelは、こういうことは柔軟なようです。 '// Sub FindAida1()  Dim Test(6) As Variant '本来は、String、元がVariantだったような…  Dim Aida() As Variant  Dim i As Long  Dim j As Long  Dim Adr1 As String, Adr2 As String  Dim msg As String  Test(0) = "B6:B13"  Test(1) = "B18:B25"  Test(2) = "B30:B37"  Test(3) = "H6:H13"  Test(4) = "H18:H25"  Test(5) = "H30:H35"  Test(6) = "H36:H40"    For i = 0 To UBound(Test()) - 1   If Adr1 = "" Then    Adr1 = Range(Test(i)).Cells(1).Offset(1).Address(0, 0)   ElseIf Adr1 <> "" And Adr2 = "" Then    Adr2 = Range(Test(i)).Cells(1).Offset(-1).Address(0, 0)    ReDim Preserve Aida(j)    Aida(j) = Adr1 & ":" & Adr2    Adr1 = "": Adr2 = ""    j = j + 1    i = i - 1 '次を始めとするために、ひとつもどり   End If   If Left(Test(i), 1) <> Left(Test(i + 1), 1) Then '列が変わった場合    Adr1 = "": Adr2 = ""   End If  Next i  ReDim Preserve Aida(j)  Aida(j) = "0" '終わり    'メッセージの出力  For i = 0 To UBound(Aida())   msg = msg & vbCrLf & Aida(i)  Next i  MsgBox msg End Sub '// 今回の話とは関係のない前の件ですが、VB6 Runtimeの所在とか分かりましたか? Excel2003をフルインストールすれば、入っているような気がしたのですが、なければ、 たぶん、ここのを使えばよいと思います。MicrosoftのDownloadにもあった気がするのですが、見つかりませんでした。 http://www.vector.co.jp/soft/win95/util/se342080.html Visual Basic 6.0 SP6 ランタイムファイルVB6.0で作成されたソフトの動作に必要なランタイム(XP,Vista,7 対応、最新SP6)

satoron666
質問者

お礼

回答ありがとうございます! 物理的に動かし?間を考えるのですね! 列が違う場合は、列の文字列で比較…と メモメモ ありがとうございました! 物凄くためになりました^^ 別の話題ですが、 Excel2003をフルインストールしているとは思うのですが 入っていませんでした。 教えて頂いた所のものをダウンロードしてみました! ただ、見つかりません… 私が「入っていない」と言っているのは もしかしたら探し方が悪いのかもしれません。 RichTextBoxって、「ツール」→「参照設定」→「Microsoft RichTextbox」とあると思っています。 でも、そこには無く、ツールボックスを右クリック→その他のコントロール→RichTextboxもありません。 コントロールの追加は違う方法なのでしょうか? 本件とはずれていますが、回答いただけると嬉しいです。 よろしくお願い致します。

satoron666
質問者

補足

色々記載不足でした。 追記の件で、質問させてください。 1.リッチテキストボックスはVB6が入っていないと使えないのか (他のパソコンがこのExcelを使った場合エラーになりますか?) 2.リッチテキストボックスを見つけて、使えました!  しかし、 サブジェクトは指定された操作に対して信頼されていません。  と警告がでます。レジストリエディタをいじると書いてありますが、そこまでしないと使えないものなのですか? http://www.ka-net.org/office/of13.html 3.作るのが大変そうな場合、テキストボックスorリッチボックス  以外の方法で作ることも検討しております。  (そのままセルに記入とか?) 色々お手数をお掛けして申し訳ありません。 また、気にかけてくださってありがとうございます! 助かります^^

関連するQ&A

専門家に質問してみよう