A 回答 (9件)
- 最新から表示
- 回答順に表示
No.9
- 回答日時:
#7です。
#7の一部の主張に反論が出ているので、よければ再反論・再ご教示をください。>他言語でなじみがあって
多言語(C、VBなどか)が既習で、そこより、エクセルVBAの学習・使用に入るとき、その他言語にとらわれるなといいたい。それらとエクセルVBAは別物と思うからです。
○エクセルのセルを一旦2次元配列にして使ったほうがよい(便利な)ケースがあれば、簡単なケースなら教えてください。配列化するだけ回りくどいのでは。
>根本的に違いは
違いがあることは、説明される程度のことはわかってます。
>ビジネスモデルに、2次元配列を必要とするかは
「ビジネスモデル」というのは他の特別な大きな意味があります。エクセルVBAを使って仕事(事務)をする場合、というぐらいの意味でしょうが、私は配列化を必要を感じたことはありません。
>上級者向けのVBAの書籍には、2次元配列を詳しく取り上げたものもあります
ほとんどVBAの書物は、書店でぱらぱらめくって見て一部購入していますが、出くわしていません。
よければ具体的な書名をあげて見てください。
私の稚拙な質問に多くの方よりご返信頂き、
大変感謝しております。
私の技術不足により作業が滞っていたため、焦り、
皆様のお知恵をお借りしたのが本質問の発端ですが、
この時点では、掲示板を介して見知らぬ方が、
言葉丁寧に挑発しているようにしか見えません。
> よければ具体的な書名をあげて見てください。
技術力のある方からすれば、些細な質問かも
しれませんが、それが元で掲示板上で言い合いに
なるのは本意ではありません。
「喧嘩ではない、議論しているだけ」と
おっしゃられるかもしれませんが、
正直上記書き込みは、挑発しているだけのように
見えてしまいました。
※本意でなければ大変申し訳ありません。
お世話になっておきながら大変申し訳ありませんが、
これ以上の議論は辞して頂けないでしょうか。
自分のような技術不足の方が参照したときに
質問のしづらい場所になってしまうようで
心苦しいです。
長文失礼致しました。
No.8
- 回答日時:
imogashiさん、
>エクセルVBAでセルを扱うことに限ると、2次元配列という発想が出ることがおかしいとおもいます。
その発想が出ること自体は、おかしいことではないと思います。他言語でなじみがあって、応用できるのではないか、と思われる方もいらっしゃるものだと思います。私自身もExcelで2次元配列はよく使います。
ただ、Excel独特な部分を含めて、それなりのテクニックが伴います。1次元配列と比較すると、かなりややこしくなります。ワークシートのRangeオブジェクトと2次元配列の根本的に違いは、片方はオブジェクトで、片方はメモリ空間にあるマトリックス上の値であるということです。一見同じように扱えますが、後者は、ワークシート上のRangeオブジェクトを切り離すことによって、元の位置にあるセルの範囲の加工ができるということです。
ビジネスモデルに、2次元配列を必要とするかは、その人の技術次第でしょうけれども、Excelでは、上級者向けのVBAの書籍には、2次元配列を詳しく取り上げたものもあります。
No.7
- 回答日時:
エクセルVBAでセルを扱うことに限ると、2次元配列という発想が出ることがおかしいとおもいます。
そもそもエクセルシートが2次元配列的に
Cells(i,j)
(iは行、jは列)で値などを捕らえられるからです。
ほかにRange(Cells(i,j),Cells(k,l))などの捕らえ方もできますから。
>"A1:A12"と指定しなければならないようで、
これでは固定入力になってしまい、"A1:A12"の次に
"B1:B12"、"C1:C12"…と検索を続けられなさそうです。
この真意もよく伝わりませんが、最下行を捉えることができればそれですむことでは?
それには3,4種類の方法があります。
その最終行数をdとして
For i=1 to d
If Cells(i,”A”)=○ Then
(処理)
Next i
のようなパターンで、ほとんどのエクセルVBAのビジネスの処理はまかなえます。
もう少しVBAの解説書を読まれんことを。
i行の範囲は
Range(Cells(i,”A”),Cells(i,”J”))のようにも表せます。
No.6
- 回答日時:
#5 です。
変数の宣言が抜けていました。
Dim i As Long
#1 レスの様子では、タイトルの「二次元配列で検索」という内容ではありませんね。
>"A1:A12"と指定しなければならないようで、
>これでは固定入力になってしまい、"A1:A12"の次に
>"B1:B12"、"C1:C12"…と検索を続けられなさそうです。
だから、Range(Cells(x1,y1),Cells(x2,y2))
でもよいけれど、書くのが面倒だから、
For i = 1 To 10
Range("A1:A12").Offset(,i).Value
Next i
でループするか、
For Each c in Range("A1:F12")
If c = "aa" Then Exit For
Next c
などとしたほうが、便利でしょうね。 アドレスを取るなら、c.Address とすればよいです。
返信が遅くなりまして大変申し訳ありません。
offsetの使用方法を、調べて確認しました。
大変参考になりました。
本当にありがとうございます。
※この件につきましては、
Range(Cells(x1,y1),Cells(x2,y2))
で対応させて頂きました。
No.5
- 回答日時:
私も、よく、Excelで、2次元配列を使います。
格納するのが楽ということと、やはり検索スピードが速いということです。
サンプル:
Sub Test_Array()
Dim rngArray As Variant
Dim rnum As Long
Const KensakuWord As String = "aa"
For i = 0 To 5
rngArray = Range("a1", "a12").Offset(, i).Value '二次元配列
rnum = TwoDimSearch(KensakuWord, rngArray)
If rnum > 0 Then
MsgBox i + 1 & " 列目の" & rnum & " 個目に見つかりました", 64
End If
Next i
End Sub
Private Function TwoDimSearch(KensakuWord As String, BaseArray As Variant) As Long
For i = LBound(BaseArray, 1) To UBound(BaseArray, 1) '二次元配列の1次側
If BaseArray(i, 1) = KensakuWord Then
TwoDimSearch = i
Exit For
End If
Next i
End Function
代わりに、以下のようにしてもよいです。
ただし、rnum は、Variant 型で、
rnum = Application.Match(KensakuWord, rngArray, 0)
見つからなかったときを、
IsError(rnum) で分岐させます。
No.3
- 回答日時:
検索する目的がわかりませんが・・・。
検索するなら、find も使えますし。
Sub a()
Dim 範囲 As Variant
Dim i As Long
Dim j As Long
'配列に格納
Set 範囲 = Range("A1:F10")
For i = LBound(範囲) To uboud(範囲)
For j = LBound(範囲, 2) To uboud(範囲, 2)
Debug.Print 範囲(i, j)
Next
Next
'お手軽なのが
Dim c As Variant
For Each c In 範囲
Debug.Print c.Value
Next
'Range の代わりに
For i = 1 To 6
For j = 1 To 10
Debug.Print Cells(i, j)
Next
Next
End Sub
参考URL:http://www.sigoto.co.jp/excel/statement/state09. …
No.2
- 回答日時:
Rangeプロパティ以外にもCellsプロパティもありますよ。
そちらのほうがmarbo30 さんがやりたいことに沿っていると思います。
・Cells(Row位置,Col位置)
Cells(1, 1) は、Range("A1")と同じ位置を示します。
なので、Cellsのインデックスを変数に置き換えて
ループすればいいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Visual Basic(VBA) vba 15 2023/04/07 12:33
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Excel(エクセル) Excelについて A1からA12まで、1月〜12月と入力し、 B1からB12の範囲に、C1とD1に 4 2022/05/26 22:48
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Excel(エクセル) Excelの関数についての質問です。(vlookup関数) A列 B列. C 1 大阪 50. 検索 6 2023/08/11 13:35
- Excel(エクセル) Excelで関数を使って入力した値を、関数を抜いた値として扱いたい 1 2022/07/08 02:10
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列数式の解除
-
verilogで配列の任意の8bitを取...
-
subの配列引数をoptionalで使う...
-
ヤマ括弧でくくられたテキスト...
-
配列変数の添字が範囲外ですと...
-
linest関数に配列を渡す
-
特定のセル範囲で4文字以上入力...
-
エクセルVBAで配列の追加
-
【excel VBA】 配列番地の検索
-
OutlookVBAでサブフォルダ一括作成
-
2次元配列について、教えてくだ...
-
Excel VBA配列をFunctionに渡す
-
VBAで近似曲線の係数取得
-
Excel マクロ VBA プロシー...
-
教えて下さい
-
Excel_マクロ_現在開いているシ...
-
TERA TERMを隠す方法
-
メッセージボックスのOKボタ...
-
非表示の列をすべて削除するマクロ
-
ブレーカー落ちで壊れたりしな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列数式の解除
-
2つ以上の変数を比較して最大数...
-
特定のセル範囲で4文字以上入力...
-
配列変数の添字が範囲外ですと...
-
ListViewで、非表示列って作れ...
-
VBA 1次元配列を2次元に追加する
-
VB6 配列を初期化したい
-
subの配列引数をoptionalで使う...
-
配列を任意の数値で埋める方法
-
for each の現在の配列ポインタ...
-
エクセルで最小値から0を除く方法
-
2次元動的配列の第一引数のみを...
-
VBのFunctionで、配列を引数...
-
Excel-VBAの配列「Public Const...
-
《エクセル2000》A列・B列の商...
-
linest関数に配列を渡す
-
VBAで近似曲線の係数取得
-
配列内の内容を全て表示する方法
-
Excel VBA配列をFunctionに渡す
-
AES暗号にて、AES_set_encrypt_...
おすすめ情報