Sheets("抽出").Select
Sheets("売上").range("a1").currentregion.action:=xlfiltercopy,copytorange:=range("a1:c1")
Sheets("売上")には
日付 担当 売上金額
5/5 A 50000
6/7 B 10000
Sheets("売上").range("a1").currentregion.action:=xlfiltercopy,copytorange:=range("a1:c1")
で行うと列は任意に決めると列の順番どおり、
抽出できます。が
担当 売上金額 日付
A 50000 5/5
B 10000 6/7
とできますが、
あらかじめ担当Aだけで絞り
担当 売上金額 日付
A 50000 5/5
このように抽出することは可能でしょうか
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
No2です
>どうやっていれかえるのでしょうか
単にデータを入れ替えるだけですから、プリミティブにやるなら値を取得して入れ替えればよいでしょう。
原理的には変数の値の入れ替えと同じような考え方です
tmp = a
a = b
b = tmp
みたいな。
とはいえ、シートであることを有効に利用するなら、手作業と同様に挿入や削除を使うのが簡単かもしれません。
No2にも書きましたように、どうせ並び替えるのなら、コピーする際に入れ替えながらコピーする方法も考えられます。
データ範囲や(CurrentRegionになっているので)、どこをどう入れ替えたいのかが不明なので例示しようがないので、例としてはだいぶ適当ですが・・・
◆コピーする際に、各列の順序をランダムにして入れ替える例
ランダムな順序を作成するのに却って行数を使ってしまいましたが(本末転倒?)、実際にはどのような順にするのかは決まっているのでしょうから、配列などに定義してそれを参照しながらコピペすればよいので、順序を作成すると言ってもほぼ1行ですみます。
Set sorc = Range("A5").CurrentRegion
Set dest = Worksheets("Sheet1").Range("A1").Resize(1, sorc.Columns.Count)
sorc.AdvancedFilter Action:=xlFilterInPlace, criteriarange:=Range("a1:g2")
'ランダムな順序を作成
dest.Formula = "=Rand()"
dest.Offset(1).Formula = "=Rank(A1," & dest.Address & ")"
dest.Offset(1).Copy
dest.PasteSpecial Paste:=xlPasteValues
dest.Offset(1).ClearContents
'各列を上のランダム順に従ってコピペ
For Each c In dest
sorc.Columns(c.Value).SpecialCells(xlCellTypeVisible).Copy Destination:=c
Next c
入れ替える列が少なく単純なものなら、コピーした後に入れ替えてもよいでしょう。
◆ふたつの列を入れ替えるだけならこんな感じで可能です。
他にも方法はいくらでもあると思いますが・・・
(コピペ先のCurrentRegionでデータ範囲が取得できるものと仮定しています)
Set rng = Worksheets("Sheet1").Range("A1").CurrentRegion
col1 = 2
col2 = 5
a = rng.Columns(col1)
b = rng.Columns(col2)
rng.Columns(col2) = a
rng.Columns(col1) = b
col1、col2は、当然ながらデータ範囲の列数以下である必要があります。
(範囲外の場合はエラーになります)
※ 上例では、単純なコピーで処理を行っていますので、非コピーセルの内容に関数式等が含まれている場合には、列を入れ替えると参照関係がおかしくなる可能性が大です。(定数のみとあらかじめわかっていれば問題はありません)
関数式が含まれているような場合は、「値をペースト」で定数化するように変えるのが簡単だと思います。ただし、この場合は関数の機能は失われます。
なお、元データと値を連動させたいような場合には、元のセルへの参照式を作成して、その式を設定するようなことになりますが、これには「位置関係を計算して参照式を作成する処理」が必要となりますので、ご提示の処理とはまったく内容が異なるものとなります。
No.2
- 回答日時:
No1です。
>列のの順番を変えることはかのうでしょうか
プログラムなんだから好きに入れ替えればよいだけでは?
別シートで他に影響が無いのであれば、列ごと入れ替えてしまえばよい。
(他に影響する場合は、その表の範囲内だけ入れ替える)
コピペで処理する方法に変えたようなので、コピペする時に順序を入れ替える方法でもよさそう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Sheet2の日付をキーにオートフィルターで2023年1月のデータを抽出し、Sheet3へ書き出すた 2 2023/03/06 23:57
- Visual Basic(VBA) excelVBAについて。 4 2022/11/21 16:15
- Visual Basic(VBA) AdvancedFilterについての質問 2 2022/07/02 22:58
- Excel(エクセル) ExcelVBAについて。 2 2022/12/10 20:08
- Visual Basic(VBA) excelVBAについて。 1 2022/11/30 06:16
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
- Excel(エクセル) excelVBAについて。 8 2022/12/11 13:47
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/06/01 14:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
IIF関数の使い方
-
VBAでのリスト不一致抽出について
-
VBマクロ 色の付いたセルを...
-
マクロ 最終列をコピーして最終...
-
VBAを使って検索したセルをコピ...
-
エクセル VBA ユーザーフォー...
-
VBA A列にありB列にないものま...
-
B列の最終行までA列をオート...
-
複数処理 Worksheet_Change(ByV...
-
超難 日付に対するクロス集計
-
文字列の結合を空白行まで実行
-
VBA 値と一致した行の一部の列...
-
空白セルをとばして転記
-
エクセルVBAにて =A1=B1とすれ...
-
【VBA】2つのシートの値を比較...
-
エクセルVBA intersect colu...
-
VBAのFind関数で結合セルを検索...
-
オートフィルタをマクロで作成...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
VBAを使って検索したセルをコピ...
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
【VBA】2つのシートの値を比較...
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
エクセルVBAにて =A1=B1とすれ...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
マクロについて。S列の途中から...
-
VBA UserFormからの転記で
-
targetをA列のセルに限定するに...
おすすめ情報
Sub j()
Range("a5").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace,
criteriarange:=Range("a1:g2")
Range("a5").CurrentRegion.SpecialCells(xlCellTypeVisible).Select
Selection.Copy Destination:=Sheets("sheet1").Range("a1")
End Sub
この場合だと列は 担当 売上金額 日付の順でしかでません。
担当 売上金額 日付
A 50000 5/5
列のの順番を変えることはかのうでしょうか
どうやっていれかえるのでしょうか