Excel2003 vba
お世話になります。以下のようなコードを書いているのですが、意図しない動きをしているのでご教授願いたいです。
No|名前 |食べられる
1 |リンゴ|○
2 |テレビ|
3 |電話 |
4 |バナナ|○
5 |ミカン|○
上のようなデータにオートフィルタをかけて、○がついているデータだけを配列に取り込もうとしています。
Dim Buff As Variant
Cells(1, 1).AutoFilter field:=3, Criteria1:="○"
Range("A1").CurrentRegion.Select
Buff = Range("A2", "C6").SpecialCells(xlCellTypeVisible) '一番上はフィールド名なのでA2から
フィルタがかかった状態で見えている「リンゴ」「バナナ」「ミカン」のデータだけをBuffに取り込んでいるつもりなのですが、Buffの中には1行目にかかれている「リンゴ」のデータしか入ってきません。
フィルタがかかっている時は違うデータの取り方があるのでしょうか。
よろしくお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
例データ
A列 B列 C列
1ax
2by
3cz
4at
5sy
6au
7gr
8st
ーー
コード B列がaの、C列の値を配列に
Sub test01()
Dim d(100)
Dim Buff As Variant
Cells(1, 1).AutoFilter field:=2, Criteria1:="a"
Range("A1").CurrentRegion.Select
Set Buff = Range("A1:C8").SpecialCells(xlCellTypeVisible)
For Each cl In Buff
If cl.Column = 3 Then
d(k) = cl
k = k + 1
MsgBox cl
End If
Next
End Sub
ーー
表示されるもの
X,t,u
No.3
- 回答日時:
こんばんは。
配列というのは、全部が繋がっているものか、マトリックス(格子)になっているものだけです。
普通は、一旦、セルに貼り付けしてから、再度取り直しますが、直接、取得するなら、以下のコードのようにします。
配列に取得したものを、出力する場合は、配列が、縦横が逆に取れていますから、取得した後に、Transpose 関数で、縦横を転換する必要があります。
'-------------------------------------------
Sub Test1()
Dim Buff() As Variant
Dim r As Range
Dim c As Range
Dim d As Range
Dim i As Long
Dim col As Long
Dim k As Long
With ActiveSheet
.Cells(1, 1).AutoFilter field:=3, Criteria1:="○"
With .AutoFilter.Range
Set r = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
col = .Columns.Count
End With
End With
For Each c In r.Rows
ReDim Preserve Buff(col - 1, i)
For Each d In c.Cells
Buff(k, i) = d
k = k + 1
Next d
k = 0
i = i + 1
Next c
'Range("A15").Resize(UBound(Buff, 2) + 1, col).Value = Application.Transpose(Buff)
End Sub
'-------------------------------------------
No.2
- 回答日時:
いやーはずしてました。
やったことはありませんがそれでいいと思っていました。
下のコードを実行してみたら
Sub Buddd()
Dim s As Variant
s = Union(Range("A1:B3"), Range("A10:B13"))
Debug.Print UBound(s, 1)
End Sub
結果は3
飛び飛びの範囲はvariantに代入すると最初の範囲しか入らないようです。
フィルタではなく、そういう問題があるんですね。
ちょっとアプローチを変えてみます。
できそうでできなかったので、むず痒くて^^;
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAコピー 2 2022/06/08 21:45
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) Sheet2の日付をキーにオートフィルターで2023年1月のデータを抽出し、Sheet3へ書き出すた 2 2023/03/06 23:57
- Visual Basic(VBA) 【至急】Excel 同一人物の情報を一行にまとめる(複数行) 6 2022/05/24 17:58
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
表にフィルターをかけ、絞ったデータ(可視化セルのみ)を一次元配列として変数に入れるという動作を書きた
Visual Basic(VBA)
-
EXCELのVBA-フィルタ抽出後のセル選択方法
Visual Basic(VBA)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
-
4
VBAのautofilter、criteriaの配列指定について(Excel2016)
Excel(エクセル)
-
5
エクセルVBAでオートフィルター最上行を取得するには
Excel(エクセル)
-
6
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
7
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
8
ExcelVBAで質問です。離れた二次元配列を一つにしたい
Visual Basic(VBA)
-
9
【VBA】【ユーザーフォーム_ListBox】オートフィルタで絞りこんだ値だけを取り出したい
Visual Basic(VBA)
-
10
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
11
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
12
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
13
Excelオートフィルタで複数のセルの値を参照して抽出したい
Excel(エクセル)
-
14
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
15
Excelで可視セルの行番号取得
Visual Basic(VBA)
-
16
VBAで先月、先々月を求める方法
Visual Basic(VBA)
-
17
【Excel】 セルの色での判断はできますか?
Excel(エクセル)
-
18
エクセルで折り返しと縮小の同時設定は無理?
Excel(エクセル)
-
19
エクセルのフィルタオプションで「ある文字列を含まない」条件は?
Excel(エクセル)
-
20
Excelのセルの色指定をVBAから配列を用いて効率的に行う方法はあり
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
表にフィルターをかけ、絞った...
-
ExcelのINDEXとMATCH関数でスピ...
-
Excelのオートフィルタで抽出し...
-
配列がとびとびである場合の書き方
-
Excelのセルの色指定をVBAから...
-
DataSetから、DataTableを取得...
-
EXCEL VBA 2次元配列に格納さ...
-
エクセルで、絶対値の平均を算...
-
VBA Dictionaryオブジェクトの...
-
Dictionaryを使い4つの条件の一...
-
C言語で、変数名を引数として渡...
-
バイト配列の構造体変換について
-
エクセルの行の削除を配列で高...
-
バッファーオーバラン
-
MFC コンボボックスを複数扱う
-
.NET - 配列変数を省略可能の引...
-
iniファイルのキーと値を取得す...
-
【VBA】配列に数式を仕込む方法...
-
Split関数でLong配列に格納する...
-
array関数で格納した配列の型を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
ExcelのINDEXとMATCH関数でスピ...
-
[エクセル]連続する指定範囲か...
-
array関数で格納した配列の型を...
-
表にフィルターをかけ、絞った...
-
エクセルで、絶対値の平均を算...
-
配列がとびとびである場合の書き方
-
[VBA]改行入りのセルの値を配列...
-
Excel オートフィルタのリスト...
-
DataSetから、DataTableを取得...
-
iniファイルのキーと値を取得す...
-
配列のSession格納、及び取得方...
-
エクセルでエラーを無視して一...
-
エクセル 条件を指定した標準...
-
Dictionaryを使い4つの条件の一...
-
読み込みで一行おきに配列に格納
-
.NET - 配列変数を省略可能の引...
-
For Nextマクロの高速化につい...
-
SUMPRODUCT関数を用いた最小値
-
VB6.0 ファイルの一括読込み
おすすめ情報