
1.AI8:AI71の範囲に記入してある文字【有】を全検索する
※該当範囲には,数式で【有】or【無】or【(空白)】が記入されています。
2.該当セルの列番号を取得し,配列arrBufに格納する
3.arrBufのデータの内,連番毎に新たな配列に格納したい
※r.rowの値が33~40,55~64となった際に,それぞれを別の配列に格納したい
上記,3がしたくて頭を悩ませています。
もしくは,arrBufに格納する際に,連番毎に配列を作成することはできるのでしょうか。
以下コード抜粋
With wsImput
Dim FoundCell As Range, FirstCell As Range, Target As Range
Set FoundCell = .Range("AI8:AI71").Find(what:="有", LookIn:=xlValues, LookAt:=xlWhole)
If FoundCell Is Nothing Then GoTo ErrLabel
Set FirstCell = FoundCell
Set Target = FoundCell
Do
Set FoundCell = .Range("AI8:AI71").FindNext(FoundCell)
If FoundCell.Address = FirstCell.Address Then
Exit Do
Else
Set Target = Union(Target, FoundCell)
End If
Loop
Dim i As Integer: i = 1
Dim arrBuf As Variant
ReDim arrBuf(i To Target.Count, 0)
Dim r As Range
For Each r In Target.Rows
arrBuf(i, 0) = r.Row
i = i + 1
Next r
宜しくお願いします。
No.4ベストアンサー
- 回答日時:
No.3です。
個人的には、こんな書き方が分かり易いと思います。
Dim r As Range
For Each r In Target.Areas
Debug.Print r.EntireRow.Columns("A:CR").Address
Next
No.3
- 回答日時:
直接の回答でなくて申し訳ないのですが、次のコードの意味、分かりますか? 肝は、Areas プロパティです。
まぁ、やってみれば分かると思いますが・・・。Dim r As Range
For Each r In Target.Areas
Debug.Print r.Address
Next
ご回答頂きありがとうございます!
頂いたコードを確認したところ,
$AI$33:$AI$40
$AI$55:$AI$64
の2つがイミディエイトウインドウに表示されました。
この範囲を
$A$33:$CR$40
$A$55:$CR$64
へ変更したのち,配列に格納するにはどのように記述すれば良いのでしょうか?
Target.Resize(行,列).selectで選択範囲を拡張しようと思ったのですが,
「型が一致しません」となります。
No.2
- 回答日時:
No1です
>33~40が取得された場合,Range("A30:CR40").valueを配列に格納します
ますますわからないけれど、Range("A33:CR40").Value じゃないの?
>配列のサイズは(1 to 8,1 to 90)になります。
A列からCR列迄は96列あります。なんで「90」なのかわからない。
Value値をとると、それだけの要素数の配列になるので、全体の要素数はかなりのものになりますがそれでも良いのでしょうか?
とりあえずそのままとしてありますが、通常 Range の Value値をとると2次元配列になりますので、結果的にarrBufは疑似的な3次元配列となります。
(要素を「サイズ不定の2次元配列」とする、1次元配列になる)
Sub Q12844661()
Dim n As Long, i As Long, startR As Long
Dim v, arrBuf()
v = Range("AI1:AI72").Value
v(72, 1) = 0
startR = 0
n = 1
For i = 8 To 72
If v(i, 1) = "有" Then
If startR = 0 Then startR = i
Else
If startR > 0 Then
ReDim Preserve arrBuf(1 To n)
arrBuf(n) = Range(Cells(startR, 1), Cells(i - 1, 96)).Value
n = n + 1
startR = 0
End If
End If
Next i
End Sub
※ 個人的にはarrBufは、"$A$33:$CR$40" 等のセル範囲を要素に持つ1次元配列にしておいた方が扱い易そうな気がしますけれど・・・
ご回答頂きありがとうございます。
おっしゃるとおり
【正】Range("A33:CR40").Value
【誤】Range("A30:CR40").value
【正】配列のサイズは(1 to 8,1 to 96)
【誤】配列のサイズは(1 to 8,1 to 90)
でした・・・。申し訳ありません。
いただいたコードの中身を理解し,擬似的な3次元配列となる理由を考えてみます!
ありがとうございました。
No.1
- 回答日時:
こんにちは
最終形をどうなさりたいのか、よくわかりません。
例えば、33~40が一つの連続とした場合に、配列の対応要素を
Array(33,40)
としたいのか、
Array(33,34,35,36,37,38,39,40)
あるいは、その他なのかなど。
また、連続が1つのみの場合に、
前者なら、
Array(33,33)
後者なら、
Array(33)
なのか、単体の数値の
33
なのかなど。
※ ちなみにFindメソッドではスタートを指定しないと、2番目の要素からチェックしますので、最初の要素がヒットする場合には一番最後にピックアップされることになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ワークシート内 検索 HITしたら すべて選択する 6 2021/11/11 22:50
- Visual Basic(VBA) Vba Cells.Findについて教えてください 1 2023/09/13 19:47
- Visual Basic(VBA) Excel VBAでフォルダ内の全テキストファイルの任意データを取得について 7 2021/12/18 16:00
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) excel VBAでメールを送る方法について 2 2021/11/03 15:34
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) 【VBA】ユーザーフォーム リストボックスのヘッダー設定方法 2 2021/12/02 11:15
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
表にフィルターをかけ、絞った...
-
[エクセル]連続する指定範囲か...
-
ExcelのINDEXとMATCH関数でスピ...
-
配列がとびとびである場合の書き方
-
array関数で格納した配列の型を...
-
エクセルで、絶対値の平均を算...
-
VBAでの100万行以上のデータの...
-
EXCEL VBA 2次元配列に格納さ...
-
iniファイルのキーと値を取得す...
-
配列のSession格納、及び取得方...
-
【VBA】ユーザーフォーム リス...
-
Excelのセルの色指定をVBAから...
-
【VBA】 動的な変数(定数)の指定
-
FileListBoxでの複数ファイル選択
-
【VBA EXCEL2000 グラフ】 月...
-
SUMPRODUCT関数を用いた最小値
-
.NET - 配列変数を省略可能の引...
-
VB6.0 ファイルの一括読込み
-
16進数から2進数へ
-
DataSetから、DataTableを取得...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで、絶対値の平均を算...
-
[エクセル]連続する指定範囲か...
-
表にフィルターをかけ、絞った...
-
ExcelのINDEXとMATCH関数でスピ...
-
Excelのセルの色指定をVBAから...
-
Excel オートフィルタのリスト...
-
DataSetから、DataTableを取得...
-
array関数で格納した配列の型を...
-
読み込みで一行おきに配列に格納
-
.NET - 配列変数を省略可能の引...
-
【VBA】ユーザーフォーム リス...
-
配列がとびとびである場合の書き方
-
SUMPRODUCT関数を用いた最小値
-
iniファイルのキーと値を取得す...
-
VBAでの100万行以上のデータの...
-
エクセルでエラーを無視して一...
-
配列のSession格納、及び取得方...
-
VBA 配列に格納した値の平均の...
-
VB6.0 ファイルの一括読込み
-
Datatableへの代入
おすすめ情報
ご回答ありがとうございます!
33~40が取得された場合,Range("A30:CR40").valueを配列に格納します。
配列のサイズは(1 to 8,1 to 90)になります。
その後,配列内の必要な値を別シートに転記しようと考えています。
また,連続が一つのみであれば要素数1の配列として
Range("A33:CR33").valueを配列に格納したいです。
Findメソッドの開始について
After:.Range("AI8")を追加しました!
ありがとうございます。