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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列数式の解除
-
ListViewで、非表示列って作れ...
-
2つ以上の変数を比較して最大数...
-
Excel-VBAの配列「Public Const...
-
【MATLAB】任意の多次元配列か...
-
VBA Match関数の限界
-
[VB.net] StringからByte配列へ...
-
subの配列引数をoptionalで使う...
-
配列変数の添字が範囲外ですと...
-
VBA 1次元配列を2次元に追加する
-
VBAで多次元配列のインデックス...
-
エクセルで最小値から0を除く方法
-
VB6 配列を初期化したい
-
2次元配列について、教えてくだ...
-
for each の現在の配列ポインタ...
-
VBのFunctionで、配列を引数...
-
C言語を用いた3×3の平方行列と...
-
特定のPCだけ動作しないVBAマク...
-
UserForm1.Showでエラーになり...
-
メッセージボックスのOKボタ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列数式の解除
-
2つ以上の変数を比較して最大数...
-
配列変数の添字が範囲外ですと...
-
特定のセル範囲で4文字以上入力...
-
VBA 1次元配列を2次元に追加する
-
ListViewで、非表示列って作れ...
-
subの配列引数をoptionalで使う...
-
for each の現在の配列ポインタ...
-
VB6 配列を初期化したい
-
エクセルで最小値から0を除く方法
-
2次元動的配列の第一引数のみを...
-
VBのFunctionで、配列を引数...
-
配列を任意の数値で埋める方法
-
Dim は何の略ですか?
-
配列内の内容を全て表示する方法
-
Excel-VBAの配列「Public Const...
-
Excel VBA配列をFunctionに渡す
-
[VB.net] StringからByte配列へ...
-
ヤマ括弧でくくられたテキスト...
-
《エクセル2000》A列・B列の商...
おすすめ情報