人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルのマクロを覚えたいと思いますが、何をどのようにすればいいのかわかりません。
つきましては例題を作りましたので、?マクロの記述・作成方法と動かし方、?関数を使った場合の計算式の書き方の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となっています。

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

1407018285
●拡大する

●質問者: iwana1999
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●1000ポイント ベストアンサー

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

iwana1999さんのコメント
回答を頂きましてありがとうございました。 説明がわかりづらかったかもしれませんが、結果の数値をアップします。 http://file-post.net/ja/fs5/data/1407026606_28033464966_72/?id=TjkZHCjAgQxl 任意の行のA列とB列のデーターをそれぞれ、A1およびB1セルに入れたときにC1セルの値とD1セルの値を、選択した行のC列とD列に代入したかったのですが。。。 以上、よろしくお願いいたします。

iwana1999さんのコメント
追記です。 >A1 を手入力すると、B1, C1, D1, C7?, D7? の数値が変わる、ってことで良いんですよね A1にはA7~A20のデーターが自動的に入れたいのです。 また、B1にはA列データーと同じ行のB7~B20のデーターを自動的に入れたいのです。 それで、C1およびD1セルの値をA列、B列データーに対応する行のC列とD列に代入したいのですが。。。。 よろしくお願いします。

iwana1999さんのコメント
コメントの操作ミスで、同じ内容が何度もアップされており、申し訳ありません。m(_ _)m

a-kuma3さんのコメント
>> A1にはA7~A20のデーターが自動的に入れたいのです。 << A1 に入る数値の候補は複数ありますが、「自動的に」というのは、 -何をきっかけにして -どれを候補に選ぶ のでしょうか?

a-kuma3さんのコメント
もしかして、C1、D1 に入る式が変わるのですか? C1、D1 の式を変えたら、C7?、D7? も、その式に従った数値にしたい、ということですか?

iwana1999さんのコメント
本来は、A1およびB1に手入力でデーターを入れて、その結果のC1とD1の値を別のセルに転記することをしていますが、省力化のためにA1に入れるデーターをA列にあらかじめ書いて起きます。また、B1に入れるデーターもあらかじめB列に書いて起きます。 次に、A列およびB列のデーターをそれぞれ、A1およびB1セルに入れたときの答えがC1,D1セルに計算されますので、その結果をC列とD列に転記したいのですが。。。 なお、A列とB列のデーターはもっとしたまでつづきますが、適当なところで中断しました。 以上の説明で良いでしょうか。

a-kuma3さんのコメント
>> A列およびB列のデーターをそれぞれ、A1およびB1セルに入れたときの答えがC1,D1セルに計算されますので、その結果をC列とD列に転記したいのですが。。。 << C1、D1 が数式だったら、C1?D1 をコピー、C7?C20 へ貼り付け、ということで実現できそうな気もしますけど。 行数が多くて、貼りつけ範囲を指定するのが面倒なのだ、ということであれば、 +C1?D1 をコピー +B7 のセルを選択 +Ctrl キーを押しながら、カーソルキーの「↓」を押す +B列で値が入っている最後のセルまで飛ぶので、「→」を押して、C*にセルを移動する +Ctrl キーと Shift キーを押しながら、「↑」を押す +カーソルが C6 に来るので、Shift キーを押したまま、Ctrl キーを離して、「↓」を押す +C7?C* が選択されている状態なので、Ctrl+V を押して貼り付け という感じで操作できます。 C7? が空の状態になっているのが前提の操作ですが、値が埋まってても、似たような操作で範囲を選択できます。 一応、C1、D1 の数式を、C7?、D7? へコピーするマクロを、回答に追記しました。

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
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ