
No.4ベストアンサー
- 回答日時:
No1です。
>n m に何かいれればよいのですか
回答で説明してあるように、入れ替える対象となる列番号です。
(正しくは、配列の第二添え字のインデックス番号)
他の補足コメントを見ると、なんだか迷走しているようなので、多少一般化したものを作成してみました。
2次元配列だけを対象にします。
使い方は、以下のような感じ。
x = Range("A1:D6").Value
f = columnChanger(x, 2, 4)
If f Then Range("A8:D13").Value = x
関数化してありますが、プロシージャとほぼ同様です。
戻り値は、Booleanで
TRUE:列の入れ替え処理を完了
FALSE:引数の不整合などで、無処理のまま
を意味します。
確実に処理できることがわかっている場合は、戻り値は取得しなくてもOKです。
x = Range("A1:D6").Value
columnChanger x, 2, 4
Range("A8:D13").Value = x
みたいな感じ。
第一引数は対象となる配列。第二、第三引数は入替え対象のインデックス番号です。
(A列始まりの配列ならシートの列番号と一致しますが、他のセル範囲の場合はインデックスなので番号はずれます。)
関数本体は以下の通り。
Function columnChanger(ByRef arr, m As Long, n As Long) As Boolean
Dim i As Long, tmp
Dim f As Boolean
' 引数チェック
f = IsArray(arr)
If f Then
On Error Resume Next
While Err.Number = 0
i = i + 1
tmp = UBound(arr, i)
Wend
On Error GoTo 0
If i <> 3 Then f = False
End If
If f Then
If m < LBound(arr, 2) Or UBound(arr, 2) < m Then f = False
If n < LBound(arr, 2) Or UBound(arr, 2) < n Then f = False
End If
columnChanger = f
If Not f Then Exit Function
' 列の入れ替え
For i = LBound(arr, 1) To UBound(arr, 1)
tmp = arr(i, n)
arr(i, n) = arr(i, m)
arr(i, m) = tmp
Next i
End Function
No.3
- 回答日時:
もし一気にしたければ既に出ていますけど、
・B列をZ列(ここは任意且つ使われていない所)にコピペ。
・C列をB列にコピペ。
・Z列をC列にコピペ。
マクロの自動記録でそこそこ作れるのでは?
あとは無駄を削ってみる。
No.2
- 回答日時:
>列の順番を入れ替えて吐き出すことは可能でしょうか
を具体的に記載されてないので回答がわからないのでは?
例:
2列目と4列目を入れ替える。
n:2
m:4
になりますよね?
でも『取得したデータのある列(任意の3列とか?)とある列(同じ)を入れ替える』としたら、また回答も変わるかもです。
単に応用ですけどね。
なのでどの列とどの列をについて、具体的な記載程的確な回答に繋がると思いますよ。
応用が厳しいのであれば。
No.1
- 回答日時:
こんにちは
変数xは基本的に2次元配列になっていますので、
tmp = x(i, n)
x(i, n) = x(i, m)
x(i, m) = tmp
を行数分繰り返せば、n列とm列を入れ替えられます。
ループするのがかったるければ、一旦、出力してしまってから列範囲をまとめて入れ替える方が簡単かも知れません。
こちらなら、まとめて処理できるので、一回の入れ替えで済みます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
VBAで重複データを確認したい
-
B列の最終行までA列をオート...
-
【VBA】2つのシートの値を比較...
-
DataGridViewに空白がある場合...
-
VBAのFind関数で結合セルを検索...
-
IIF関数の使い方
-
マクロ 最終列をコピーして最終...
-
【Excel VBA】カンマと改行コー...
-
VBAでの重複データの別シート表...
-
targetをA列のセルに限定するに...
-
VBAで、離れた複数の列に対して...
-
rowsとcolsの意味
-
Sheet1のA列にコードB列にメア...
-
1から9までの数値をランダムに...
-
VBAを用いて条件付きの平均値、...
-
VBAの構文 3列置きにコピーし...
-
エラーコード1004
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
vba 2つの条件が一致したら...
-
【VBA】2つのシートの値を比較...
-
B列の最終行までA列をオート...
-
IIF関数の使い方
-
URLのリンク切れをマクロを使っ...
-
VBAを使って検索したセルをコピ...
-
DataGridViewに空白がある場合...
-
VBA 何かしら文字が入っていたら
-
VBAのFind関数で結合セルを検索...
-
複数の列の値を結合して別の列...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
VBAで指定範囲内の空白セルを左...
-
rowsとcolsの意味
-
【Excel VBA】 B列に特定の文字...
-
VBAで、特定の文字より後を削除...
-
エクセル 2つの表の並べ替え
おすすめ情報
すみません
tmp = x(i, n)
x(i, n) = x(i, m)
x(i, m) = tmp
なんとなくは わかりますが、
n m に何かいれればよいのですか
例えばB列とC列を入れ替える
こんなところなんですが
わりません
arr = Array("C", "B")
For i = LBound(arr) To UBound(arr)
arr1(i) = Columns(arr1(i)).Column
Next
検索でてて来ましたが、
配列でやりたのです なんとかなりませんでしょうか
Worksheets.Add
ActiveSheet.Next.Activate
With ActiveSheet
.Columns(2).Copy .Previous.Range("A1")
.Columns(4).Copy .Columns(2)
.Previous.Columns(1).Copy .Columns(4)
Application.DisplayAlerts = False
.Previous.Delete
Application.DisplayAlerts = True
End With