プロが教える店舗&オフィスのセキュリティ対策術

膨大なデーターを表に入力するのに途方に暮れています。マクロ(VBA?)で自動的に入力する方法を教えて下さい。

エクセルのセル、A1~G1まで、横方向に入力した計算式や、数値をマクロで記憶させて、
同じ処理を、2行~1000行まで自動で繰り返させたいと思っていますが、繰り返しの指示の書き方がわかりません。行によって入力する数値が異なる為、
コピペではできません。どなたか宜しくお願いします。

A 回答 (7件)

マクロが万能といえど、コピペを超えるものではありません。

内容が各行で違うなら、結局はその内容をマクロの中に作りこまなくてはいけないので(何か法則があればべつですが)。

計算式の変わる法則がわからないとここでは回答できません。
コピペ(オートフィル)して、手作業で変更しかないように見受けられます。
    • good
    • 0

ご希望に近い処理はおそらくマクロでできるとは


思いますが、結局部分的にイレギュラーな値入力が
必要であれば「自動」で入力できるわけはありません。
なにをどうしたいかもう一度よくまとめてから
再度ご質問なさるほうがよろしいかと思います。

この回答への補足

ご回答ありがとうございます。
行ごとに入力するイレギュラーな数値は
まったくイレギュラーな物ではなく、
1つの決まった処理を、行ごとに行えばOKなんです。
行が変わっても処理方法は同じです。

よって、1行目のA列~G列で入力、処理した物を
マクロで記憶させて、1行目と同じ処理を2行目以降
自動的に繰り返すように指示できればOKなんです。

  A列 B列 C列 D列 E列 F列 G列
1行 あ 
2行 こ
3行 し

A列にはイレギュラーなひらがな文字が並んでいて、
その文字を拾いながら、
B列、C列、D列、E列、F列、G列に
各処理を行い、1行目は完成します
1行目の処理はマクロで記憶させたのですが
同じ処理を自動的に2行目以降にやらせる方法が
わかりません。各行の処理が、全て計算式であれば、コピペで対応できるのですが、計算で無い処理が
含まれているので、マクロでやろうと思っています。
因みに、一行の処理は出来ていて、マクロ処理で記録
できています。

補足日時:2005/11/03 20:01
    • good
    • 0

質問の表現が、しっくりこないです。


それと計算式を具体的に記してください。
マクロの記録を参考にできても、繰り返しは、別途自分で考えないと
いけない。
計算をするのには、マクロの記録は私なら使いません。
>膨大なデーターを表に入力するのに
シートが出来上がったところをイメージしてください。
そのセルの中には
(A)手入力、コピーして入力など演算以外で、値がセットされたセル
(B)(A)を四則演算や関数で計算した値の表示されているセル
の2種あります。VBAでやると、セルに関数式がセットされない
場合もあります。関数式をセットして計算させるもできます。しかし前者のほうが
適当でしょう。
(A)は計算ではどうしようもありません。入力しないとなりません。
(B)はVBAで計算で算出できます。
(B)の計算ですが、第X行目の「(B)に分類される全セルについて考えて」、第X行以外のセルの値を使いますか。
使わなければ簡単です。
また「YYならZZを計算、出なければVVを計算」のように、条件を噛ませますか?
それらを書かないで、質問しても具体的に書けない。質問者のレベルでは、具体的に回答を書かないと、ヒントだけでは解決しないのではないかと思いますが。

この回答への補足

ご回答、ありがとうございます。

  A列  B列  C列  D列
27行 1815
28行 1816
29行 1819
30行 1820

A列には、ランダムな4桁の値が並んでいて、
それを使ってB,C,D列を完成していきます
B,C,D列の値は、計算ではなく、A列の数字を
文字列として扱います。27行目のB~D列までの
処理をマクロで記憶させて、2行目以降同じ処理
を繰り返し自動で処理させたいと考えています。

27行目のB列には、=RSS|'1815.T'!銘柄名称
    C列には、=RSS|'1815.T'!現在値
    D列には、=RSS|'1815.T'!前日比率
と入力します。各行で対応させなければならない値は、A列の値の4桁の数字のみで、他の入力内容は、
行が変わっても同じです。27行目の場合は、1815、
28行目の場合は、1816を対応させなければなりません。

27行目の処理をマクロで記録させた内容は、以下の通りです。

Range("A27").Select
ActiveCell.FormulaR1C1 = "1815"
Range("B27").Select
Selection.ClearContents
ActiveCell.FormulaR1C1 = "=RSS|'1815.T'!銘柄名称"
Range("C27").Select
ActiveCell.FormulaR1C1 = "=RSS|'1815.T'!現在値"
Range("D27").Select
ActiveCell.FormulaR1C1 = "=RSS|'1815.T'!前日比率"
Range("E27").Select
End Sub


これを、28行目以降も同じように入力し、
自動的に100行位処理させたいのです。
27行目には、“1815”という値が対応していますが、
28行目以降は、“1816”という値を対応させなければ
なりません。各行ごとに対応させる値が、A列に
入っています。その他の処理は行が違っても
同じ入力内容なので、繰り返しができれば
OKだと思うのですが・・
対応させる値は、コピペの作業をマクロ処理で記憶させてあります。いかがでしょうか?
アドバイスお願いします。

補足日時:2005/11/03 20:15
    • good
    • 0

B列~D列の計算式に定数を使う理由があるのでしょうか?A列のセルを参照すればよい話だと思うんですが。



RSSっていう関数が良くわからないのですが、

たとえばB列に
=RSS|A1&"'.T'!銘柄名称"
というように内容を参照すれば良いような。
式の一般化はできないのでしょうか?できれば、それをコピペでいけるんですが。
    • good
    • 0

#3です。


Sub test02()
d = Range("a65536").End(xlUp).Row 'データ最下行の行数字を取得
For i = 2 To d
x = "Sheet" & Cells(i, "A") 'シート名文字列を作る
Set sh2 = Worksheets(x)
Cells(i, "B") = sh2.Cells(1, "A") '以下3行はs適当に修正してください
Cells(i, "C") = sh2.Cells(2, "A")
Cells(i, "D") = sh2.Cells(3, "A")
Set sh2 = Nothing
Next i
End Sub
補足の意味が十分取れてないのですがよろしく。
、=RSS|'1815.T'!銘柄名称
の部分。
    • good
    • 0

>、=RSS|'1815.T'!銘柄名称


の「RSS」は恐らく、質問者さんのPCで使用している株価データソフトではないですか。

この作業には、「For・・・Next」の繰返し処理が適していると思います。
下に参考コードを載せました。
なお、各コードの前の空白は、全角です。コピーする際は、削除するか、半角に変えて下さい。

Private Sub test()
Dim iRow As Integer '行指定
Dim iNumber As Integer 'A列4桁数字
  Application.DisplayAlerts = False '*注
  iNumber = 1815 'A列の4桁数字初期指定
  For iRow = 27 To 30 '27行目(始まり行)~30行目(終り行)
    Cells(iRow, 1).Select 'A列をセレクト(アクティブ化)
    Cells(iRow, 1) = iNumber 'A列に数字を入力
    Cells(iRow, 2) = "=RSS|'" & iNumber & ".T'!銘柄名称" 'B列に式を入力
    Cells(iRow, 3) = "=RSS|'" & iNumber & ".T'!現在値" 'C列に式を入力
    Cells(iRow, 4) = "=RSS|'" & iNumber & ".T'!前日比率" 'D列に式を入力
    iNumber = iNumber + 1 '4桁数字を1つ繰上げ
  Next iRow
  Application.DisplayAlerts = True '*注
End Sub

*注,コードの中にある「Application.・・・」は、私のPC環境では「RSS」に相当するソフトが無いため、エラー(#REF!警告)が出て、マクロがストップするので入れています。
質問者さんのPCでエラーが出ないなら、必要ありません。

この回答への補足

ありがとうございます。

さっそくコピペしてみたのですが、
“コンパイルエラー”と表示されて、実行できません。

コピペした内容は以下の通りです。
おかしな所をご指摘くだされば幸いです。

Sub Macro4()
'
' Macro4 Macro
' マクロ記録日 : 2005/11/3 ユーザー名 : A1
Private Sub test()
Dim iRow As Integer '行指定
Dim iNumber As Integer 'A列4桁数字
iNumber = 1815 'A列の4桁数字初期指定
For iRow = 27 To 30 '27行目(始まり行)~30行目(終り行)
Cells(iRow, 1).Select 'A列をセレクト(アクティブ化)
Cells(iRow, 1) = iNumber 'A列に数字を入力
Cells(iRow, 2) = "=RSS|'" & iNumber & ".T'!銘柄名称" 'B列に式を入力
Cells(iRow, 3) = "=RSS|'" & iNumber & ".T'!現在値" 'C列に式を入力
Cells(iRow, 4) = "=RSS|'" & iNumber & ".T'!前日比率" 'D列に式を入力
iNumber = iNumber + 1 '4桁数字を1つ繰上げ
Next iRow
End Sub

補足日時:2005/11/04 00:34
    • good
    • 0

#6です。



>さっそくコピペしてみたのですが、
>“コンパイルエラー”と表示されて、実行できません。
Sub Macro4()


Private Sub test()


End Sub

“Sub”と“End Sub”の間に“Private Sub”が入っているため、エラーになります。
“Private Sub test()”の行を削除して、実行して見てください。
    • good
    • 0
この回答へのお礼

e10goさん、ありがとうございます。
バッチリ、走ってくれました。
助かりました。感謝です。

お礼日時:2005/11/04 18:59

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