Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5786 / 13645 ツリー ←次へ | 前へ→

【48865】セルの値の交換方法 ユニフ 07/5/12(土) 21:11 質問[未読]
【48866】Re:セルの値の交換方法 ichinose 07/5/12(土) 22:14 発言[未読]
【48869】Re:セルの値の交換方法 Kein 07/5/13(日) 15:43 回答[未読]
【48872】Re:セルの値の交換方法 ユニフ 07/5/13(日) 20:02 お礼[未読]

【48865】セルの値の交換方法
質問  ユニフ  - 07/5/12(土) 21:11 -

引用なし
パスワード
   よろしくお願いします。

セルA1に(りんご)、セルB1に(ばなな)と書いてあります。
このりんごとばななの文字の交換に

Sub test()
Range("C1").Value = Range("A1").Value
Range("A1").Value = Range("B1").Value
Range("B1").Value = Range("C1").Value
Range("C1").ClearContents
End Sub

という順送りの方法を使っていますが、これを

Sub test()
セルA1の値とセルB1の値を交換する
End Sub

のように一行でこなせるコードはありますでしょうか?

【48866】Re:セルの値の交換方法
発言  ichinose  - 07/5/12(土) 22:14 -

引用なし
パスワード
   ▼ユニフ さん:
こんばんは。


>セルA1に(りんご)、セルB1に(ばなな)と書いてあります。
>このりんごとばななの文字の交換に
>
>Sub test()
>Range("C1").Value = Range("A1").Value
>Range("A1").Value = Range("B1").Value
>Range("B1").Value = Range("C1").Value
>Range("C1").ClearContents
>End Sub
>
>という順送りの方法を使っていますが、これを
>
>Sub test()
>セルA1の値とセルB1の値を交換する
>End Sub
>
>のように一行でこなせるコードはありますでしょうか?
昔のBasicには、Swapというステートメントがありましたけどねえ!!

方法としては、ユニフ さんの提示されたロジックが簡単ですよ
但し、テンポラリエリアに別のセル(C1)を使う必要はないですよね!!

'==========================
Sub main()
  Dim a1 As Range, b1 As Range
  Set a1 = Range("a1")
  a1.Value = "りんご"
  Set b1 = Range("b1")
  b1.Value = "バナナ"
  MsgBox "ok"
  Call swap(a1, b1)
End Sub
'============================
Sub swap(ByVal x1 As Range, ByVal x2 As Range)
  Dim tmp As Variant
  tmp = x1.Value
  x1.Value = x2.Value
  x2.Value = tmp
End Sub

【48869】Re:セルの値の交換方法
回答  Kein  - 07/5/13(日) 15:43 -

引用なし
パスワード
   一行にしなくてはならない、という意味は殆どないと思います。
実際、どんなに長いコードでも ":" や "_" で繋いで「一行に見せる」
とか「一行分を複数行に分割する」などのテクは普通にありますし、
一行が三行に増えたところで、処理速度が目立って長くなるようなことは
ありません。なので出来るだけ簡潔なコードにしたい、というご希望なら・・

Sub Ch_V()
  Dim V As Variant
 
  With Range("A1:B1")
   V = .Value: .Cells(1).Value = V(1, 2): Cells(2).Value = V(1, 1)
  End With
End Sub

これを応用すれば、3個以上のセルの値も自由に入れ替えることが出来ます。

【48872】Re:セルの値の交換方法
お礼  ユニフ  - 07/5/13(日) 20:02 -

引用なし
パスワード
   ichinoseさんkeinさんありがとうございました。

お二人のコードで勉強させていただきます。

5786 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free