プロが教えるわが家の防犯対策術!

EXCELのマクロで質問です。
A1セルには「C1」と入力されています。
B1セルには「あ」と入力されています。
そのままマクロを実行すると、C1セルにB1セルの値である「あ」と入力され、
A1セルの値を「C2」と入力し直してからマクロを実行すると
C2セルにB1セルの値である「あ」が入力されるようにしたいです。
マクロの作り方をご教授お願いします。

A 回答 (3件)

No.1です。



もっと簡単にできますね。

Sub Sample2()
 Range(Range("A1")) = Range("B1")
End Sub

こんな感じでしょうかね。m(_ _)m
    • good
    • 1
この回答へのお礼

ありがとうございます。助かりました。

お礼日時:2019/12/02 06:53

ヒロモリさん、はじめまして



tom04さん、正回答がされているのにすみません。

>マクロの作り方をご教授・・とありますので、お節介します。

セルの値をセルアドレスとして参照し実行するので、自動記録マクロでは、記録できません。

所謂、VBAコードをVBEで書く必要があります。
Excelを開き、AltキーとF11キーを同時に押しVBE(エディター)を起動させます。
ご希望の処理をする場合、適当なのは、標準モージュールか処理されるシートのドキュメントモジュールです。

https://excel-ubara.com/excelvba1/EXCELVBA304.html

書き方は、モジュールで違いますが、先ず処理自体を考えてください。

A1セルにAAと入力して実行した場合は、AAと言うセルはありませんので、1004エラーになります。

ご質問の処理は、エラーの出る可能性が高いので、エラー処理か、A1セルにリストなどを適用する必要があります。
この場合、エラーを起こさない為の入力チェックと言う形が良いと思います。

例を挙げます。(標準モジュールの場合)

A1セルが空白の場合、②が表示されます。
セルアドレスでない文字の場合、①が表示されます。
これで、入力値(A1)によるエラーの発生を概ね防ぐ事が出来ますね。
さらに、
With ActiveSheet としたのは、実行するシートは明示的に行う癖をつけた方が良いです。
例えば、Sheets(1). シートインデックス や Sheets("名前"). シート名

.Value Valueプロパティはあえて書いてあります。この場合、省いて全く問題ありません。
しかし、省いた場合、省いていると言う事は、覚えておいてください。

Sub Test()
  With ActiveSheet
    If .Range("A1").Value <> "" Then
      If Evaluate("ISREF(" & .Range("A1").Value & ")") = True Then
        .Range(.Range("A1").Value).Value = .Range("B1").Value
'        .Range("B1").Copy .Range(.Range("A1").Value) ' ③ 書式もコピー
      Else
        MsgBox ("A1セルはセルアドレスを入力してください。")  '①
        Exit Sub
      End If
    End If
  Else
    MsgBox ("A1セルにセルアドレスを入力してください。") '②
  End With
End Sub

A1セルに入力されているセルアドレスにB1せるの値を入力する。
一行コードですが、VBAを作る時は、色々なケースを想定する事も必要ですね。

ちなみに③は、書式もコピーする場合です。

例(シートモジュールの場合)
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Target.Address = "$A$1" Then Exit Sub
  If Range("A1") <> "" Then
    If Evaluate("ISREF(" & Range("A1") & ")") = True Then
      Range(Range("A1")).Value = Range("B1")
      '        Range("B1").Copy Range(Range("A1")) ' ③書式もコピー
    Else
      MsgBox ("A1セルはセルアドレスを入力してください。") '①
      Exit Sub
    End If
  Else
    MsgBox ("A1セルにセルアドレスを入力してください。") '②
  End If
End Sub

標準モジュールに書いたマクロは、マクロを登録したボタンやリボンから実行します。

https://www.tipsfound.com/vba/01004

シートモジュールに書かれたイベントマクロChangeは(例の場合)A1に値を入力した時に実行されます。
    • good
    • 1
この回答へのお礼

ありがとうございます。リストから選択する様にします。

お礼日時:2019/12/02 06:55

こんにちは!



一例です。

Sub Sample1()
 Dim myAd As String
  myAd = Range("A1")
   Range(myAd) = Range("B1")
End Sub

くらいで大丈夫だと思います。m(_ _)m
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!