No.3ベストアンサー
- 回答日時:
横から失礼します
#1様の回答がすべてのような気がしますが
サンプルをいくつか作りましたので内容を確かめてみてください
配列にしたい対象列、範囲などが示されていませんので #2にあるように
ファンクションで書くべきでしょうかが、良く分からないようですので
A列の値のある最下段セルまでです
取得とDebug.Print 出力
セルに書き出す時に配列の利点を生かして出力などとしています
わざわざ一次元配列にするのはVariant配列で飛び行を一度に入れられない為でしょうか?
諄いようですが#1、2様の回答で完結されていると思いますので
BAは辞退します
サンプルについてもあくまで参考程度のものですので悪しからず
*コピーファイルなどで検証用にブックを作成して自己責任で確認してください
Sub test_01()
'配列(1列限定)一次元配列
Dim rng As Range, r As Range
Dim n As Long, i As Long
'可視セル範囲取得
Set rng = Range("A2", Cells(Rows.Count, "A").End(xlUp)).SpecialCells(xlCellTypeVisible)
'配列サイズ設定
ReDim arr(0 To rng.Count - 1)
'配列作成
For Each r In rng
arr(n) = r
n = n + 1
Next
'出力(取得)方法1
For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Next
'出力先行がフィルタにかかる場合フィルタ解除
If (ActiveSheet.AutoFilterMode = True) Then ActiveSheet.Range("A1").AutoFilter
'出力(取得)方法2
Cells(2, Columns.Count).End(xlToLeft).Offset(, 1).Resize(UBound(arr) + 1) _
= Application.WorksheetFunction.Transpose(arr)
End Sub
Sub test_02()
'二次元配列
Dim rng As Range, Rng1 As Range
Dim n As Long, i As Long
'可視セル範囲取得
Set rng = Range("A2", Cells(Rows.Count, "A").End(xlUp)).SpecialCells(xlCellTypeVisible)
'作業列取得
Set Rng1 = Cells(2, Columns.Count).End(xlToLeft).Offset(, 1)
'コピーにより飛び行を加工(修正)
rng.Copy Rng1
'配列(Variant)
Dim arr As Variant
'作業列(データ)を配列に代入
arr = Rng1.Resize(rng.Count)
'作業列をクリアー
Range(Rng1, Cells(Rows.Count, Rng1.Column).End(xlUp)).ClearContents
'出力(取得)方法1
For i = 1 To UBound(arr)
Debug.Print arr(i, 1)
Next
'出力先行がフィルタにかかる場合フィルタ解除
If (ActiveSheet.AutoFilterMode = True) Then ActiveSheet.Range("A1").AutoFilter
'出力(取得)方法2
Rng1.Offset(, 1).Resize(UBound(arr)) = arr
End Sub
Sub test_03()
'A列可視セルを一次元配列に
'条件分岐により可視セルを取得する方法(対象を含むセルをループ)
Dim i As Long, n As Long
Dim arr()
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If Not Rows(i).Hidden Then
ReDim Preserve arr(n)
arr(n) = Cells(i, "A").Value
n = n + 1
End If
Next
'出力(取得)方法1
For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Next
End Sub
Sub test_04()
'A列可視セルを一次元配列に(更に格納条件を付加する場合)
'予め可視セル範囲を取得する方法(可視セルでループ)
Dim rng As Range, r As Range
Dim arr()
Dim n As Long, i As Long
'可視セル範囲取得
Set rng = Range("A2", Cells(Rows.Count, "A").End(xlUp)).SpecialCells(xlCellTypeVisible)
For Each r In rng
'セルの値が3文字以上なら格納
'フィルタ条件を更に違う条件を設けて取得
If Len(r.Value) >= 3 Then
ReDim Preserve arr(n)
arr(n) = r.Value
n = n + 1
End If
Next
'出力(取得)方法1
For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Next
End Sub
コードまで丁寧にありがとうございます。
コードをどう組むか教えて頂きたかったので、
言葉だけの説明だとまだ組めるレベルではなくて。。
欲しい回答をQちゃんさんに頂けたのでベストアンサーを受け取って欲しいです。
助かりました。ありがとうございます。。
No.2
- 回答日時:
No1です。
>どのようにコーディングするのか教えてください。
No1に記載した通りなのですが・・・
以下は、一例ですが・・・
どういう使い方なのかが不明なので、関数化してあります。
配列にしたい Range を渡せば表示行のみの値を配列にして返します。
値の種類も不明なので、返される配列はバリアントの一次元配列です。
(添え字は1始まりにしてあります)
Function Column2Array(ByRef R As Range) As Variant
Dim c As Range
Dim i As Long, v()
i = 0
For Each c In R.Columns(1).Cells
If Not c.EntireRow.Hidden Then
i = i + 1
ReDim Preserve v(1 To i)
v(i) = c.Value
End If
Next c
Column2Array = v
End Function
No.1
- 回答日時:
こんばんは
一次元配列ということは、対象は一列のみと考えて良いのでしょうか?
簡単な方法は、セル範囲のValue地をまとめてバリアント変数に入れると配列として取得できますが、これで得られる結果は二次元配列になってしまいます。(一列のみでも、二次元になります)
変数 = セル範囲.Value
ただし、普通にセル範囲に対して上記を行うと非表示行も含まれてしまいますので、一旦、空き列(最終列とか)にコピペして、非表示行を無くしてから配列化するというひと手間が必要になります。
一次元配列として取得したければ、プリミティブに、セル範囲をループで順にチェックして、表示されていれば配列に加えるという方法になると思います。
あるいは、上記の方法で二次元配列に取得したものを、単純ループで一次元配列に転記するとかもないことはないでしょう。
VBAの場合、配列の添え字範囲を定義しておく必要があるので、
数が増加する毎に
ReDim Preserve
で配列数を再定義してゆく方法もありますし、事前に全体数を把握してセットしておく方法も考えらえます。
表示セルには「必ず値がある」と仮定してもよいのなら、シート関数のSUBTOTALを利用することで、事前に全体数を把握することができるでしょう。
https://learn.microsoft.com/ja-jp/office/vba/api …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA 書式変更で困ってます。 オートフィルターの日付フィルターを用いて データの絞り込 2 2022/07/26 22:16
- Visual Basic(VBA) vbaについて 主に以下のような設定をしたいです。 Aブックの表の行数が20未満だったら Bブックの 1 2023/06/08 23:40
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Excel(エクセル) [オートフィルター]機能について 3 2023/02/04 14:32
- Excel(エクセル) excelで可視セルのみ置換 3 2022/08/04 11:02
- Excel(エクセル) 表内で、Enterキーで横→行の最後入力したら次の行の先頭に移動するマクロを作りたい 3 2022/05/01 21:19
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
- Excel(エクセル) エクセルについて教えてください。 2 2023/06/14 11:11
- Excel(エクセル) Excelにの以下の設定方法について教えてください! C列にデータ入力の設定をしています。(出、入を 3 2022/06/22 01:33
このQ&Aを見た人はこんなQ&Aも見ています
-
餃子を食べるとき、何をつけますか?
みんな大好き餃子。 ふと素朴な疑問ですが、餃子には何をつけて食べますか? 王道は醤油とお酢でしょうか。
-
「平成」を感じるもの
「昭和レトロ」に続いて「平成レトロ」なる言葉が流行しています。 皆さんはどのようなモノ・コトに「平成」を感じますか?
-
「覚え間違い」を教えてください!
私はかなり長いこと「大団円」ということばを、たくさんの団員が祝ってくれるイメージで「大円団」だと間違えて覚えていました。
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
Excelのオートフィルタで抽出したものを配列で取得したい
Excel(エクセル)
-
エクセルVBAでオートフィルター最上行を取得するには
Excel(エクセル)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
複数指定セルの可視セルのみを別シートに転記するVBAについて
Visual Basic(VBA)
-
5
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
6
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
7
Offsetで可視セルだけを移動したい。
Excel(エクセル)
-
8
vba フィルター 複数条件 3つ以上 完全一致除外
Visual Basic(VBA)
-
9
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
10
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
11
VBAの配列サイズとメモリに関して
Visual Basic(VBA)
-
12
array関数で格納した配列の型を変更する
Visual Basic(VBA)
-
13
VBAのautofilter、criteriaの配列指定について(Excel2016)
Excel(エクセル)
-
14
オートフィルターをかけ、#N/A以外で絞込みするVBA記述をご教示ください
Excel(エクセル)
-
15
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
16
ExcelVBA:オートフィルタをかけたシート上でのセル内の値参照について
Visual Basic(VBA)
-
17
Excelのセルの色指定をVBAから配列を用いて効率的に行う方法はあり
Visual Basic(VBA)
-
18
EXCELのVBA-フィルタ抽出後のセル選択方法
Visual Basic(VBA)
-
19
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
20
Excelのフィルター後の一番上のセルをコピーする(マクロ教えて。) Excelで5行目にフィルター
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DataSetから、DataTableを取得...
-
ExcelのINDEXとMATCH関数でスピ...
-
Excelのセルの色指定をVBAから...
-
iniファイルのキーと値を取得す...
-
[エクセル]連続する指定範囲か...
-
配列がとびとびである場合の書き方
-
array関数で格納した配列の型を...
-
読み込みで一行おきに配列に格納
-
.NET - 配列変数を省略可能の引...
-
エクセルで、絶対値の平均を算...
-
【VBA】ユーザーフォーム リス...
-
VBAで指定期間の範囲を抽出し、...
-
Datatableへの代入
-
エクセルマクロについて
-
VB6.0 ファイルの一括読込み
-
Excel VBA 配列の分割について
-
[VBA]改行入りのセルの値を配列...
-
VBA Dictionaryオブジェクトの...
-
VBA 配列に格納した値の平均の...
-
仮想リストコントロールの表示
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
ExcelのINDEXとMATCH関数でスピ...
-
エクセルで、絶対値の平均を算...
-
[エクセル]連続する指定範囲か...
-
array関数で格納した配列の型を...
-
読み込みで一行おきに配列に格納
-
表にフィルターをかけ、絞った...
-
配列がとびとびである場合の書き方
-
VBA 配列に格納した値の平均の...
-
DataSetから、DataTableを取得...
-
【VBA】ユーザーフォーム リス...
-
iniファイルのキーと値を取得す...
-
.NET - 配列変数を省略可能の引...
-
Split関数でLong配列に格納する...
-
Datatableへの代入
-
Excel オートフィルタのリスト...
-
SUMPRODUCT関数を用いた最小値
-
エクセル 条件を指定した標準...
-
EXCEL VBA 2次元配列に格納さ...
-
[VBA]改行入りのセルの値を配列...
おすすめ情報
Excelのマクロでコーディングの勉強中でして。。
詳しく知ってる方がいたら教えてください。。
ご丁寧な回答をありがとうございます。
>一次元配列ということは、対象は一列のみと考えて良いのでしょうか?
対象は、表のヘッダーから下の可変データ1行分でございます。
10行でもあれば500行というように、1行分のデータを1次元配列として変数に格納したいです。
>表示セルには「必ず値がある」
こちらは必ずしも値が全て入っているわけではありません。
>一次元配列として取得したければ、プリミティブに、セル範囲をループで順にチェックして、表示されていれば配列に加えるという方法になると思います。
こちらの内容が一番自分の中でフィットしたのですが、
どのようにコーディングするのか教えてください。
ありがとうございます。
こちらのコードはこのまま記載して実行するとできますでしょうか。。