- ベストアンサー
指定範囲のセル範囲を出す方法
- VBAを使用して、指定範囲の同じ列のセル範囲を出す方法について質問しています。
- 例えば、TEST(0)には"B6:B13"が入っており、同じ列のセル範囲を出したいと考えています。
- 引き算ではなく別の方法が必要なようですが、良い方法があれば教えて欲しいとしています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >StringやVariantは2GBまでとありました。 >この場合単純計算で10万文字書けるという考えで >良いのですよね?(もしかしたら計算違いかもしれません) 私の計算でも、同じです。 昔、試したことがありますが、思いの外、取れました。 本来は、データ型を指定したほうが、大きく取れるようですが、必ずしもうまくいくとは限りません。 お分かりになっていることだと思いますが、それは、Variant型でないといけない時があります。 >その場合、SPLIT後、String型やVariant型に保存し、 >セルに書き出すプログラムを書こうと思ってます! こちらの方は、試していませんが、なんとかなると思っています。 >>で検索し、いくつか、CLSID(クラスID)が出てきます。 >ひとつしか出てきませんでした。 >また、(既定)しかありませんでした。 >何か使い方がおかしいのでしょうか? いいえ、ふつうの人は、ひとつだけのはずです。私が今使っている、Win7 には、プログラミング言語は、MSC とか、VB.Netとかあるのですが、今は、Turbo C しか入れていないつもりでいるのですが、それでも、いろいろ入っているらしいのです。もう、あれこれ手を出すのは止めにしたいと思っていますのに、つい、VBAに戻ってきてしまいました。Office 2003は、アンイストールしたのですが、残骸が残っている上に、新たにVB6 Runtimeを入れてしまいました。そのせいだと思います。 それはともかく、ブランクがあってVBA関数などは忘れても、基本的なところは忘れていないものなのですね。
その他の回答 (2)
- WindFaller
- ベストアンサー率57% (465/803)
こんにちは。 >物理的に動かし?間を考えるのですね! 昔、そんなことをやった覚えがあるので、今回もその手法を使ったまでです。 これは、ソートした時に、手では順に選べるのに、なぜ、マクロでは出来ないか考えた時のアイデアが発端です。 >レジストリエディタをいじると書いてありますが、そこまでしないと使えないものなのですか? セキュリティの強化された時に、「信頼されていません」の警告が出るようになったようですね。 私がやっていた時代にはありませんでした。もともと、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という話の方向になってしまったのです。
お礼
回答ありがとうございます! 色々プログラムを組まれているみたいで 尊敬します^^ 私ももう少し上手く組めるようになりたいところです… >手順としては、RegEdit を立ち上げて、 >Rich TextBox Control >で検索し、いくつか、CLSID(クラスID)が出てきます。 ひとつしか出てきませんでした。 また、(既定)しかありませんでした。 何か使い方がおかしいのでしょうか? >他の方法というか、前回書いたように、本来は、 >変数内で処理してしまい、その後、ワークシートに、吐き出せばよいです。 >そっちのほうが、ずっと簡単ですけれど、 >私は、途中からの参加で、TextBox 自体を使う経緯を知らなかったので、 >こういうRich TextBoxという話の方向になってしまったのです。 いえいえ!私の説明不足だと思います。 色々抜けることがあるので^^; 変なことを聞くかもしれませんが、 StringやVariantは2GBまでとありました。 この場合単純計算で10万文字書けるという考えで 良いのですよね?(もしかしたら計算違いかもしれません) その場合、SPLIT後、String型やVariant型に保存し、 セルに書き出すプログラムを書こうと思ってます! 色々参考になりました^^ありがとうございます!
- WindFaller
- ベストアンサー率57% (465/803)
こんにちは。 >引き算ではダメですよね(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)
お礼
回答ありがとうございます! 物理的に動かし?間を考えるのですね! 列が違う場合は、列の文字列で比較…と メモメモ ありがとうございました! 物凄くためになりました^^ 別の話題ですが、 Excel2003をフルインストールしているとは思うのですが 入っていませんでした。 教えて頂いた所のものをダウンロードしてみました! ただ、見つかりません… 私が「入っていない」と言っているのは もしかしたら探し方が悪いのかもしれません。 RichTextBoxって、「ツール」→「参照設定」→「Microsoft RichTextbox」とあると思っています。 でも、そこには無く、ツールボックスを右クリック→その他のコントロール→RichTextboxもありません。 コントロールの追加は違う方法なのでしょうか? 本件とはずれていますが、回答いただけると嬉しいです。 よろしくお願い致します。
補足
色々記載不足でした。 追記の件で、質問させてください。 1.リッチテキストボックスはVB6が入っていないと使えないのか (他のパソコンがこのExcelを使った場合エラーになりますか?) 2.リッチテキストボックスを見つけて、使えました! しかし、 サブジェクトは指定された操作に対して信頼されていません。 と警告がでます。レジストリエディタをいじると書いてありますが、そこまでしないと使えないものなのですか? http://www.ka-net.org/office/of13.html 3.作るのが大変そうな場合、テキストボックスorリッチボックス 以外の方法で作ることも検討しております。 (そのままセルに記入とか?) 色々お手数をお掛けして申し訳ありません。 また、気にかけてくださってありがとうございます! 助かります^^
お礼
回答ありがとうございます! >こんにちは。 こんにちは! >私の計算でも、同じです。 >昔、試したことがありますが、思いの外、取れました。 >本来は、データ型を指定したほうが、大きく取れるようですが、必ずしもうまくいくとは限りません。 >お分かりになっていることだと思いますが、それは、Variant型でないといけない時があります。 Variant型で無いといけないときが特に思いつきません…うーん、なんでしょう? >>その場合、SPLIT後、String型やVariant型に保存し、 >>セルに書き出すプログラムを書こうと思ってます! >こちらの方は、試していませんが、なんとかなると思っています。 では、この方法で色々変更していきたいと思います^^ >いいえ、ふつうの人は、ひとつだけのはずです。私が今使っている、Win7 には、プログラミング言語は、MSC とか、VB.Netとかあるのですが、今は、Turbo C しか入れていないつもりでいるのですが、それでも、いろいろ入っているらしいのです。もう、あれこれ手を出すのは止めにしたいと思っていますのに、つい、VBAに戻ってきてしまいました。Office 2003は、アンイストールしたのですが、残骸が残っている上に、新たにVB6 Runtimeを入れてしまいました。そのせいだと思います。 そうでしたか。 すごいですね・・・色々出来るんですね! 私はVBAもままならないですが…VBAから幅を広げ、どんどん便利なものを作れるようC言語とかも勉強したいと思います! >それはともかく、ブランクがあってVBA関数などは忘れても、基本的なところは忘れていないものなのですね。 そうですね!私もExcelの関数(便利な部分?)とか、ちゃんと覚えてますね^^ ありがとうございました!