Excel VBA質問箱 IV

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

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


9468 / 13644 ツリー ←次へ | 前へ→

【27093】2つのセルの中身を入れ替える方法を教え... 田村亮 05/7/28(木) 20:32 質問[未読]
【27095】Re:2つのセルの中身を入れ替える方法を教え... bykin 05/7/28(木) 21:00 回答[未読]
【27096】Re:2つのセルの中身を入れ替える方法を教... ponpon 05/7/28(木) 21:32 発言[未読]
【27098】マウスで「ずりっ」と二つ選ぶと??? ponpon 05/7/28(木) 21:45 発言[未読]
【27099】Re:2つのセルの中身を入れ替える方法を教... MARBIN 05/7/28(木) 22:08 回答[未読]
【27100】Re:2つのセルの中身を入れ替える方法を教え... かみちゃん 05/7/28(木) 22:17 回答[未読]
【27101】Re:2つのセルの中身を入れ替える方法を教え... ponpon 05/7/28(木) 22:34 発言[未読]
【27108】Re:2つのセルの中身を入れ替える方法を教え... 田村亮 05/7/29(金) 9:27 お礼[未読]
【27122】Re:2つのセルの中身を入れ替える方法を教... kaeru144 05/7/29(金) 11:21 発言[未読]
【27124】Re:2つのセルの中身を入れ替える方法を教... 田村亮 05/7/29(金) 11:48 お礼[未読]
【27167】Re:2つのセルの中身を入れ替える方法を教... マキチャン 05/7/31(日) 16:20 発言[未読]

【27093】2つのセルの中身を入れ替える方法を教え...
質問  田村亮  - 05/7/28(木) 20:32 -

引用なし
パスワード
   時間割作成でエクセルを使っている初心者です。お知恵を拝借させてください。
任意に選んだ2つのセルの中身を入れ替えるマクロを教えて欲しいのですが。
2つのセルは、できればマクロ実行前に選択しておきたいです。または、1つをスタート前に、2つ目をマクロ実行途中で選択することでも結構です。よろしくお願いします。

【27095】Re:2つのセルの中身を入れ替える方法を教...
回答  bykin  - 05/7/28(木) 21:00 -

引用なし
パスワード
   こんばんわ。

入れ替えるといっても、データだけなのか、書式も入れ替えるのか、
数式が入ってた場合は???・・・とか、
交換対象のセル同士の大きさのチェックとか結合セルの取り扱いとか・・・
なんて考えていくと実は結構面倒なんです(^^;;

単に同一シート内の単独セル同士のセル値のみを入れ替えるんやったら、こんなんかな?

Sub test()
  Dim TempValue As Variant
  
  If TypeName(Selection) = "Range" Then
    With Selection
      If .Areas.Count = 2 Then
        If .Areas(1).Cells.Count + .Areas(2).Cells.Count = 2 Then
          TempValue = .Areas(1).Value
          .Areas(1).Value = .Areas(2).Value
          .Areas(2).Value = TempValue
        End If
      End If
    End With
  End If
End Sub

ただし、このコードでは数式が入ってたら値変換されます。
数式の場合は絶対参照/相対参照のどっちでいくんか?ってことにも配慮する必要があります。

アドインでよければ拙作の「Tool★彡」に「セル交換」機能がついてるんで
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=101;id=FAQ
いっぺん試してみておくれやす。

ほな。

【27096】Re:2つのセルの中身を入れ替える方法を教...
発言  ponpon  - 05/7/28(木) 21:32 -

引用なし
パスワード
   こんばんは。
エラー対策が苦手というかよくわからないのですが、
以下コードで何とか出来ています。
セルを二つ選んで実行してください。

Sub test()

  Dim myAD As String
  Dim myStr As Variant
  Dim myVal As Variant
  
  myAD = Selection.Address(0, 0)
  myStr = Split(myAD, ",")
  If UBound(myStr) <> 1 Then
    MsgBox "セルをちゃんと二つ選んでください"
    Exit Sub
  End If
  myVal = Range(myStr(0)).Value
  Range(myStr(0)).Value = Range(myStr(1)).Value
  Range(myStr(1)).Value = myVal

End Sub

【27098】マウスで「ずりっ」と二つ選ぶと???
発言  ponpon  - 05/7/28(木) 21:45 -

引用なし
パスワード
   こんばんは。bykinさん。 田村さん。
ちまちま、考えていたら、bykinさんから回答がついていました。
bykinさん、三角形の頂点移動ではお世話になりました。

早速、bykinさんのコード試してみました。
私のもそうなんですが、セルを一つずつ選んだときは、きちんと動くのですが、
マウスで「ずりっ」と隣同士を二つ選んだ時(わかりますか?)は、
値を交換してくれません。
Areasが、一つになるからだと思うのですが、
これは、しょうがないのでしょうか?
何か対策があるのでしょうか?
良かったら、対策を教えてください。

【27099】Re:2つのセルの中身を入れ替える方法を教...
回答  MARBIN  - 05/7/28(木) 22:08 -

引用なし
パスワード
   みなさん、こんばんは。
bykinさんのコードをパクッて隣り合った2つのセルを
選択した場合のコードを書いてみました。
ちょっと回りくどい方法ですが・・・。

Sub test2()
  Dim TempValue As Variant
  Dim sa As String
  Dim sb As String
  If TypeName(Selection) = "Range" Then
    With Selection
      If .Areas.Count = 2 Then
        If .Areas(1).Cells.Count + .Areas(2).Cells.Count = 2 Then
          TempValue = .Areas(1).Value
          .Areas(1).Value = .Areas(2).Value
          .Areas(2).Value = TempValue
        End If
      Else
         sa = Range(Split(Selection.Cells.Address, ":")(0)).Value
         sb = Range(Split(Selection.Cells.Address, ":")(1)).Value
         Range(Split(Selection.Cells.Address, ":")(0)).Value = sb
         Range(Split(Selection.Cells.Address, ":")(1)).Value = sa
      End If
    End With
  End If
End Sub

【27100】Re:2つのセルの中身を入れ替える方法を教...
回答  かみちゃん  - 05/7/28(木) 22:17 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>任意に選んだ2つのセルの中身を入れ替えるマクロを教えて欲しいのですが。

なんとく、こんな感じでもできるのではないでしょうか?
もちろん、隣り合ったセルにも対応しています。

Sub Macro1()
 Dim i As Integer
 Dim strTmp(2) As String
 If TypeName(Selection) = "Range" And Selection.Count = 2 Then
  i = 0
  For Each c In Selection
   strTmp(i) = c.Value
   i = i + 1
  Next
  For Each c In Selection
   i = i - 1
   c.Value = strTmp(i)
  Next
 End If
End Sub

【27101】Re:2つのセルの中身を入れ替える方法を教...
発言  ponpon  - 05/7/28(木) 22:34 -

引用なし
パスワード
   こんばんは。みなさん。

MARBINさん
隣同士では、"A1:B1"になりますもんね。なるほど。


かみちゃん さん
>Dim strTmp(2) As String

これが、ポイントですね。
配列に入れるまでは、気がついたのですが・・・

さすがですね。

【27108】Re:2つのセルの中身を入れ替える方法を教...
お礼  田村亮  - 05/7/29(金) 9:27 -

引用なし
パスワード
   みなさんから頂いたコードを、ど素人ながら何とか解読して、自分なりに修正することで、何とか解決することができました。みなさん、ありがとうございました。こんなに早く解決するとは、感謝、感謝です!!

【27122】Re:2つのセルの中身を入れ替える方法を教...
発言  kaeru144  - 05/7/29(金) 11:21 -

引用なし
パスワード
   初めまして kaeru144といいます
私も高校で教務をしており、今年から私が作成したもので時間割変更を行っています。まだまだ改良の余地があるのですが、今のところは動いています。
良ければ参考までに…。

Public Sub セル交換()
  Sheets("変更").Select
  Dim w, x As Range, y As Range
   If Selection.Areas.Count <> 2 Then Exit Sub
  Set x = Selection.Areas(1)
  Set y = Selection.Areas(2)
   w = x.Formula
  x.Formula = y.Formula
  y.Formula = w

'上:入れ替え 下:備考欄
    Dim Number1
      Number1 = Selection.Areas(1).EntireColumn.Range("A1").Value
    Dim Number2
      Number2 = Selection.Areas(2).EntireColumn.Range("A1").Value

    
    Selection.Areas(1).Offset(2, 0).Value = Number1 & Range("A1").Value & Number2
    Selection.Areas(2).Offset(2, 0).Value = Number1 & Range("A1").Value & Number2
   
    
End Sub

セル交換の後、その下にいつから変更がきたのか分かるようになっています。
実際のプログラムをみないと分からないかもしれませんね・・・

【27124】Re:2つのセルの中身を入れ替える方法を教...
お礼  田村亮  - 05/7/29(金) 11:48 -

引用なし
パスワード
   kaeru144さん
ご指導ありがとうございます。kaeru144さんも時間割を編集されているとのこと、非常に親近感を持ちました。こちらは、一般の学校ではなく、不登校生を全国から呼び寄せて、進学、学校復帰などを目指して勉強を主軸としている少人数制全寮制の学院で、授業は先生と生徒一対一のため、“生徒名、科目、先生名”の連続する3つのセルを1ブロック単位として頻繁にシート上を移動させる必要があります。
現在、ブロックの頭である“生徒名”のみを選択しておいて、それにつながる“科目、先生名”をひっくるめて移動させることを考えています。kaeru144さんのコードをぜひ参考にさせて頂きます。もしお時間がありましたら、学院のHPでも見て上げてください。螢生学院(静岡)です。ありがとうございました。

【27167】Re:2つのセルの中身を入れ替える方法を教...
発言  マキチャン  - 05/7/31(日) 16:20 -

引用なし
パスワード
   マクロでは有りませんがこんな方法も。
 オートシェイプで四角形を作ります。中に文字を書きます。例えば、生徒名、科目、
 先生名。一つの四角に書いてもいいですが、3個の四角に書いてもいいと思います。
 このばあい、この3つがペアなら、四角を連結しておきます。
 このようにして、時間割を作成しておけば、入れ替えは、マウスで該当の文字を好きな 場所に移動させるだけで、どうにでも、どれでも、自由に出来ます。
 四角形の周りの線は消すことも出来ます。また四角形の中の文字だけを見えるようにし て、他の部分を透明にすることも出来ます。従って罫線をひいた上に四角形があっても
 その後ろの罫線は見えるようにも出来ます。 時間割なら、よく移動させるならこんな 方法でも。
  ちなみに、私は、デジカメでとってきた写真でその上に、文字を書いてカレンダーを
  作成しています。もちろん文字だけが写真の上に浮かんでいるように見えます。
  1ヶ月分作り、つぎは、それをコピーし数字の位置をマウスで移動して作成している  のでほぼ同じやり方で出来るかなと思いました。
 的外れでしたらごめんなさい。

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