• ベストアンサー

excel 左右対照入れ替え

初めて質問させて頂きます。 excelで困っていることがあり質問させて頂きました。 excel シートに入力されている内容を左右対照入れ替えしたいのです。 簡単に書きますと、 A1 に 数字の1 B1 に 数字の2 C1 に 数字の3 D1 に 計算式 =A1+ B1 + C1 と入力してあるファイルがあったとして、それを A1 に 計算式 =A1+ B1 + C1 B1 に 数字の3 C1 に 数字の2 D1 に 数字の1 と左右対称に入れ替えたいのです。 なんらかの方法は無いでしょうか? 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.6

#2です。試しに汎用化してみました。自分で使うシチュエイションは思い浮かびませんが... Sub test() Dim i As Long Const mirrorColumnsNo As Long = 4 ActiveSheet.Columns(1).Resize(, mirrorColumnsNo).Cut Destination:=Sheets(2).Columns(1).Resize(, mirrorColumnsNo) For i = 1 To mirrorColumnsNo Sheets(2).Columns(i).Cut Destination:=ActiveSheet.Columns(mirrorColumnsNo - i + 1) Next i ActiveSheet.Columns(1).Resize(, mirrorColumnsNo).Replace What:=ActiveSheet.Name & "!", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False End Sub 最後は、Sheet1にある式に、Sheet1!という参照が付いてうるさいので、仕方なく取り除いています。

yusaku_goo
質問者

お礼

mitarashi さん 回答有難うございます。 ご親切に考えていただき感謝致します。 助かります、ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (6)

回答No.7

# 半分冗談ですが、こんなこともできますので、ご紹介。 [ツール]-[オプション]-[インターナショナル]の [現在のシートを右から左に表示する]をON。

yusaku_goo
質問者

お礼

shikisaito さん 回答有難うございます。 面白い方法ですね、ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.5

計算式があると、参照範囲がおかしくなりますが、 並び替えを使って一気に入れ替える方法もあります。 A2~D2に1~4の数字を入力 (データが多い時はオートフィルやcolumn関数が便利) A1~D2の範囲を選択しておいて、 データ、並び替えから、オプションで列単位に指定して、 行2を降順で並びかえれば一気に左右逆になります。 (数式はエラーになります) この例では並び替えの前にD1~D2を切り取ってA1~A2に挿入してから 並び替えをすれば正しくなりますが、 実際にどの程度の数式が含まれているデータを処理するかで、 並び替え後がおかしくなるかが変わってきます。 数式が狂う事が前提で、参考になればと思います。 完璧に入れ替えるなら、他の方が言っているようにVBAしかないでしょう。

yusaku_goo
質問者

お礼

abe_onesel さん 回答有難うございます。 参考になります、ありがとうございました。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

どれぐらいの広がりを持った問題によりますが、 (例えば式を移すのは関数では出来ないのをご存知か?) セルの値だけなら 1 2 3 6 6 3 2 1 第2行のA2に =INDEX($A$1:$D$1,1,5-COLUMN()) と入れて、秘儀右方向に式を複写。 ーー セルの式まで移すなら、VBAで無いと出来ません。 第3行目に出す例 Sub test01() r = Range("IV1").End(xlToLeft).Column For i = 1 To r Cells(3, r + 1 - i) = Cells(1, i) '3が第3行目を指定部分 If Cells(1, i).HasFormula Then Cells(3, r + 1 - i).Formula = Cells(1, i).Formula End If Next i End Sub

yusaku_goo
質問者

お礼

imogasi さん 回答有難うございます。 マクロ参考にさせて頂きます。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • koko88okok
  • ベストアンサー率58% (3839/6543)
回答No.3

1) A,B,C列を選択して、右クリックから「挿入」で、A,B,C列が挿入されます。 2) 移動した、G列を選択して、A列にD&D。 3) F列を選択して、B列にD&D。 4) E列を選択して、C列にD&D。 以上で、数式は自動的に =D1+C1+B1 に変更されます。

yusaku_goo
質問者

お礼

koko88okok さん 回答有難うございます。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

列丸ごと移動すれば良いのではないでしょうか。 数式はExcelが調整してくれます。 >A1 に 計算式 =A1+ B1 + C1 では循環してしまいますので、 =D1+C1+B1 等ですね。 操作をマクロの自動記録をすると Sub Macro1() Columns("A:A").Select Selection.Cut Destination:=Columns("E:E") Columns("D:D").Select Selection.Cut Destination:=Columns("A:A") Columns("B:B").Select Selection.Cut Destination:=Columns("D:D") Columns("B:B").Select Selection.Delete Shift:=xlToLeft End Sub となります。ご参考まで。

yusaku_goo
質問者

お礼

mitarashi さん 回答有難うございます。 マクロ参考にさせてください、実際は横軸にかなりの量の入力が あるシートの変換をしたいので地道にやっています。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • B_one
  • ベストアンサー率55% (246/445)
回答No.1

もっとも単純な方法は、 A1からD1を右一旦別な場所に移動します。 あとはA1だったセルをD1に、B1だったセルをC1に・・・・・・ とそれぞれ移動してやればできます。

yusaku_goo
質問者

お礼

B_oneさん 回答有難うございます。 実際は横軸にかなりの量の入力があるシートの変換をしたいので 地道にやっていきます。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A