1407018285 エクセルのマクロを覚えたいと思いますが、何をどのようにすればいいのかわかりません。

つきましては例題を作りましたので、①マクロの記述・作成方法と動かし方、②関数を使った場合の計算式の書き方の2通りについて教えてください。

例題
A1セルには、A7、A8,A9....のデーターをそれぞれ入れたい。
B1セルには、B7,B8,B9.....のようにA列の行と同じ行のB列の数値を入れたい。

A7,A8,A9...また、B7.B8,B9...のデーターをA1,B1セルに入れたときにC1の計算結果をC7,C8,C9....に入れたい
同様にD7,D8,D9....にはD1の計算結果を入れたい。
ちなみにC1=A1+B1,D1=B1-A1となっています。

当方はエクセル初心者につきまして、上記の方法を具体的に教えてください。
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/08/03 12:50:25
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント1000pt

A1 を手入力すると、B1, C1, D1, C7~, D7~ の数値が変わる、ってことで良いんですよね。

計算式の場合

f:id:a-kuma3:20140803083138p:image

見た目はこう。
f:id:a-kuma3:20140803083139p:image

B1 は、VLOOKUP 関数を使ってます。

=VLOOKUP(A1,A7:B20,2)

二番目の引数は、検索対象範囲で、B20 の 20 は、好きなだけ下に延ばしてください。
C7 が C$1 になってるのは、式のコピペが楽だからです。

  1. C7 に =C$1 と入力
  2. C7 をコピー
  3. C7~D20 を選択して、ペースト


マクロ (VBA) の場合

こういう感じで操作します。

  1. 「開発」のリボンから、「Visual Basic」をクリック
  2. 「プロジェクト」から、シートを右クリックして、「コードの表示」を選択
  3. 開いたウィンドウの上にあるリストボックスで、左に「Worksheet」、右に「Change」を選択

リストボックスを選び終わると、ウィンドウの中には、こんなのが表示されています。

Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

そこに、以下のようなコードを入力します。

Private Sub Worksheet_Change(ByVal Target As Range)

' ★ここから
Const r_start = 7
Const r_end = 20

Application.EnableEvents = False

a1 = Range("a1").Value
For i = r_start To r_end
    If (a1 = Cells(i, 1).Value) Then
        Range("b1").Value = Cells(i, 2).Value
        Range("c1").Value = a1 + Range("b1").Value
        Range("d1").Value = Range("b1").Value - a1
        Exit For
    End If
Next

For i = r_start To r_end
    Cells(i, 3).Value = Range("c1").Value
    Cells(i, 4).Value = Range("d1").Value
Next

Application.EnableEvents = True

' ★ここまで

End Sub







回答のコメントを受けての追記です。

C1 と D1 のセルの「式」を、C7~、D7~ にコピーするマクロです。

Private Sub Worksheet_Change(ByVal Target As Range)

Const r_start = 7
Const r_end = 20

Application.EnableEvents = False

For i = r_start To r_end
    Cells(i, 3).Formula = Replace(Range("c1").Formula, "1", CStr(i))
    Cells(i, 4).Formula = Replace(Range("d1").Formula, "1", CStr(i))
Next

Application.EnableEvents = True


End Sub
他6件のコメントを見る
id:a-kuma3

A列およびB列のデーターをそれぞれ、A1およびB1セルに入れたときの答えがC1,D1セルに計算されますので、その結果をC列とD列に転記したいのですが。。。

C1、D1 が数式だったら、C1~D1 をコピー、C7~C20 へ貼り付け、ということで実現できそうな気もしますけど。
行数が多くて、貼りつけ範囲を指定するのが面倒なのだ、ということであれば、

  1. C1~D1 をコピー
  2. B7 のセルを選択
  3. Ctrl キーを押しながら、カーソルキーの「↓」を押す
  4. B列で値が入っている最後のセルまで飛ぶので、「→」を押して、C*にセルを移動する
  5. Ctrl キーと Shift キーを押しながら、「↑」を押す
  6. カーソルが C6 に来るので、Shift キーを押したまま、Ctrl キーを離して、「↓」を押す
  7. C7~C* が選択されている状態なので、Ctrl+V を押して貼り付け

という感じで操作できます。
C7~ が空の状態になっているのが前提の操作ですが、値が埋まってても、似たような操作で範囲を選択できます。

一応、C1、D1 の数式を、C7~、D7~ へコピーするマクロを、回答に追記しました。

2014/08/03 11:02:56
id:iwana1999

わかりづらい質問にお答え頂きましてありがとうございました。
関数は別として、マクロは下記のように修正しましたら希望の動作となりましたの報告させて頂きます。


Private Sub Worksheet_Change(ByVal Target As Range)
Const r_start = 7
Const r_end = 20

Application.EnableEvents = False

a1 = Range("a1").Value
For i = r_start To r_end
' If (a1 = Cells(i, 1).Value) Then
Range("a1").Value = Cells(i, 1).Value
Range("b1").Value = Cells(i, 2).Value

Cells(i, 3).Value = Range("c1").Value
Cells(i, 4).Value = Range("d1").Value

' Range("c1").Value = a1 + Range("b1").Value
' Range("d1").Value = Range("b1").Value - a1
' Exit For
' End If
Next

'For i = r_start To r_end
' Cells(i, 3).Value = Range("c1").Value
' Cells(i, 4).Value = Range("d1").Value
'Next

Application.EnableEvents = True

End Sub

2014/08/03 12:49:43

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません