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

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

指定範囲の間のセル範囲を出す VBA

いつも大変お世話になっております。 変数(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(0)="B6:B13" TEST(1)="B18:B25" AIDA(0)=B14:B17 TEST(2)="B30:B37" AIDA(1)=B26:B29 TEST(3)="H6:H13" TEST(4)="H18:H25" AIDA(2)=H14:H17 TEST(5)="H30:H35" AIDA(3)=H26:H29 TEST(6)="H36:H40" AIDA(4)=0 この、AIDAを出すためには 引き算ではダメですよね(Stringのため 何か良い方法があれば教えてください。 よろしくお願い致します。

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

  • ベストアンサー
回答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

  • EXCEL VBA セルの選択範囲を変化させたい。

    いつもお世話になっております。 Range("E3:E5").Select のようなプロパティで選択するセルの範囲を列、行共に変数で与えたいのですが、 できますでしょうか?

  • 《エクセル》 マクロ-セルの範囲指定の式

    いつもお世話になります。 2つお聞きしたいのですが、エクセルで、 ・「A列のデータのあるセル範囲のみを指定する」と、 ・「A列のデータのあるセル範囲の、隣(B列)のセルを指定する」 というマクロの式はどのように書けば良いのでしょうか。

  • 結合されたセルの一覧出力 VBA

    お世話になります。 結合されたファイルの一覧を出力したいと思っています。 (できれば、変数に出力したいです) 表があり、ばらばらな範囲で結合されています。 結合した部分には、日付が入っています。 日付が入っている列は、B列とH列で、 その中で「AA」「BB」と入力されている結合セル以外の 結合セル範囲?行?を取得したいと思っております。 B列とH列の結合セル行が同じではありません。 B列は、B5:B13、B18:B25、B30:37 (それ以外のセルは結合してあっても、「AA,BB]と書いてある H列は、H6:H13,H18:H25、H30::H35,H36:H40(上と同じ) ということになっております。 できれば、 1.セル結合範囲を検索(行数取得?) 2.セルの内容が日付かどうか確認 3.日付なら、セル行数を取得 ということがしたいです。 日付の形式は、3/1などのように入っています。 このフォームが結構変わるため、 結合しているセルの中身が日付かどうかを確認し、 日付なら行数取得→色んなプログラムでその行数を使用 したいと思っています。 分かりにくい部分が多いかと思いますが、 回答お願い致します。

  • VBAでセルの範囲指定

    お世話になります。 下記の様に1回セルを指定範囲した後に、列を2列マイナス する場合の記述方法をお教え下さい。宜しくお願いします。      記 range("a1").currentregion.select

  • マクロ VBA セル範囲の拡大方法

    いつも大変御世話になっております。 WiindowsXP環境にある【D:\】フォルダ内に下記マクロ【マクロ.xls】があります。 'ソース------------------------------------------------- Sub test() Dim COLUMN1 As String Dim COLUMN2 As String COLUMN1 = "B" COLUMN2 = "C" Range(Cells(5, COLUMN1), Cells(10, COLUMN2)).Select End Sub 'ソース------------------------------------------------- 上記マクロを実行すると、当然セルB5:C10のセルが選択されます。 これをB5:D10にしたかったら【COLUMN2 = "D"】とソースを変更すれば 解決出来ます。 しかしこの【COLUMN1】と【COLUMN2】がパラメータで他VBAプログラムから 渡される場合、セルB5:D10のセルが選択可能でしょうか? パラメータで渡される列番号は必ず隣通しです。 例で言うと・・・ 【COLUMN1】にはB、【COLUMN2】にはCというパラメータがきた場合、セル【B5:D10】を選択。 【COLUMN1】にはE、【COLUMN2】にはFというパラメータがきた場合、セル【E5:G10】を選択。 というようなソースを書きたいのですが、可能ですか? もしご存知の方がいらっしゃるようでしたら、お手数ですがご教授願いますでしょうか? 以上、何卒宜しくお願い致します。

  • VBAで範囲指定をかえるには?

    マクロで範囲の選択したいのですが、任意のセルの値で範囲の大きさをかえるということは可能でしょうか? 例:range("A1:C5").seiect   任意のセルの値より    range("B1:D6").seiect という具合です    全くのトーシローなんで宜しくお願いします。   

  • VLOOKUP関数の範囲をセルで指定したいと思っています。

    VLOOKUP関数の範囲をセルで指定したいと思っています。 B1:参照シート名(VLOOKUP関数で使用する範囲があるシート) C2:範囲の開始位置 E2:範囲の終了位置 B3:G3:列番号(B3の値は、B6:B8の範囲で使用する列番号、 D3の値は、D6:D8の範囲で使用する列番号) これらのセルに入力された情報をもとにB6:G8の範囲にVLOOKUP関数を 反映させたいと思っています。 例えば、 B1に参照シート名「2ケタ」 C2にVLOOKUP関数の範囲の開始位置「A5」 E2にVLOOKUP関数の範囲の終了位置「G7」 B3に範囲の列番号「2」がある場合 B6に「=VLOOKUP(A6,'2ケタ'!A5:G7,2,0)の関数を入力。 B2に参照シート名「3ケタ」 C5にVLOOKUP関数の範囲の開始位置「B5」 E2にVLOOKUP関数の範囲の終了位置「H7」 C3に範囲の列番号「3」がある場合 C6に「=VLOOKUP(A6,'3ケタ'!B5:H7,3,0)の関数を入力。 といった感じです。 現在、B6に「=VLOOKUP($A6,INDIRECT($B$1&"!a5:g7"),INDIRECT("$b$3"),0)」と 関数を入力して、VLOOKUP関数の「範囲の参照シート名」と「列番号」の情報は セルから持ってくることができました。 しかし、「a5:g7」という範囲だけは、INDIRECT関数をうまく入れることができません。 どのように関数を入力したら、上手くいくのか、教えていただけないでしょうか。

  • セル範囲の左上のセルの取得方法

    エクセル2010のVBAで関数を自作しているのですが Test(A as range, B as range)という関数で Aはセル1個、Bはセル範囲を選択して、Aは必ずBの左上のセルになるので、 Test(B as range)の様に変数を減らしたいです。 ただ、関数内でAを使用するので、Bのセル範囲の左上の値を取得する必要があります。 Bのセル範囲の左上の取得方法が分かりません。

  • VBA 範囲指定してコピー&ペーストしたい

    WindowsXP SP2 Office2003 を使っています。 ExcelVBAで、 シート「Sheet1」のセル(B9:B40)を範囲選択してコピーし、 シート「Sheet2」のセル(A2:A33)に貼り付けをしたいのです。 行数は毎月増えていきます。 例えば、1月が9から40でしたら、2月は41から70、3月は71から102・・・ B列だけだったら、Range("B" & tateA & " :B" & tateB).Select で記述できますが、 列は、7個ずつ増えた列数の情報を取得したいのです。 Sheet1では、B列から始まり7個ずつ列数が増え、I列(I9:I40)、P列(P9:P40)、W列(W9:W40)・・・の値を Sheet2のB列、C列、D列に値ベースで貼り付けするマクロを考えています。 (Sheet2の列数は1個ずつ増えます。) ざっくりになりますが表のイメージとしては、 Sheet1にはカテゴリ毎に複数の項目があり、 Sheet2にはSheet1のカテゴリ毎の合計値だけを一覧にし、見やすく表示させたいのです。 1回の処理では1ヶ月分の処理を行うため、行情報は9から40で固定なのですが、 列番号は一定の数増えたものを変数にしたいのですが、表示の仕方が分かりません。 ようは『Range("B" & tateA & " :B" & tateB).Select』 の列表示のBも変数にして、 その変数を7個ずつ増やして処理をしたいのです。 説明がうまく出来なくて申し訳ないのですが、 列と行を変数にした表示の仕方を分かる方がいましたら、教えてください。 よろしくお願いします。

  • VBAでセルを結合

    いつもお世話になっております。 VBAで「B列に●●が入力されたら、B列から10列はなれたセルから3つ分を結合して、そのセルに××と入力する」という処理を行います。 まだ途中なんですが、こんな感じで考えています。 If B.Value = "火" Then   Range(offset0, 10),Resize(1, 3)).MergeCells = True   'ここからの処理は未定  End If マージした後にさらに値を入れるので、variantかなんかで変数を用意して、その中に入れたほうがいいかな?と考えていますが、どうでしょうか?

専門家に質問してみよう