- ベストアンサー
VBAでシート間の転記をする方法とは?
- VBAを使ってシート間の転記をする方法を教えてください。
- 転記元のデータは毎月固定の形になりますが、VBAの入力方法がわかりません。
- ウェブで情報を探しましたが、見つけることができませんでした。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> VBAの入力方法 セルの参照式みたいに特定のパターンで入力するものと混同してる感もありますが、 VBA は自分の考え方どおりの手順をプログラムするだけなので、 > 毎月横へずれていく (転記元)年月の月の行数だけずらせば良いだけだと思います。 Range.Offset(RowOffset, ColumnOffset) かな。 それよりも > 転記元のデータは、毎月固定の形になります(単月) と言いつつ(転記元)が同一メーカー複数レコードあったり、 (転記元)のメーカー順が不定だったりは普通に有り得る こと(既に転送先と順番違うし)だから、集約、検索するように した方が良いかもね。
その他の回答 (4)
- layy
- ベストアンサー率23% (292/1222)
EXCELVBAへの道 EXCELでお仕事 この2つのサイトのようなところで基本的な知識を習得する。VBAではセルをどのようにコントロール、編集できるか、確認の仕方、誤りの見つけ方、等いろいろ覚える。 元)年月2010/03 先)D列3月 元)2行目ホンダ 先)3行目ホンダ このあたりの処理をするにはどうするか、でしょうか?。 OFFSETは見ておきましょう。使えそうです。 月が横に伸びる 今後日産が抜いてトヨタが2行目の可能性あり となればセットしたいキーワードを見つけてその列に集計 を考えてもいいように思います。 すべてを満たすサンプルはあまり無く、誰かが同じことしないことには無いに等しいので、なかなか見つかりません。処理、機能ごとに分けて考えると良いです。サンプルみても自分のシステム向けにしなければならないのである程度はスキルも必要です。
お礼
回答ありがとうございます。 OFFSET、使えました! VBAって覚えること多くて大変です・・・
- Wendy02
- ベストアンサー率57% (3570/6232)
掲示板は、ご質問者さんが、どうやって覚えればということは聞いていませんから、それに関しては、オフ・ザ・ポイントとして、簡単なサンプル・コードを書いておきます。こういう場合、いわゆる汎用性のあるマクロは作りにくいです。条件が変われば、マクロは正しく動きません。 Sub TestMacro1() 'エラーは出ませんが、このマクロは失敗作です。なぜだか、分かりますか?(答えは最後) Dim sh1 As Worksheet Dim sh2 As Worksheet Dim x As Long, y As Long Dim r As Range, c As Variant Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet3") With sh1 For Each c In .Range("B2", .Cells(Rows.Count, 2).End(xlUp)) Set r = sh2.Columns("A").Find(c.Value, , xlValues, xlWhole) If Not r Is Nothing Then y = r.Row x = Month(c.Offset(, -1)) + 1 'A列は、日付書式になっていること sh2.Cells(y, x).Value = sh2.Cells(y, x).Value + c.Offset(, 1).Value End If Next End With End Sub Sub TestMacro2() '関数方式 Dim sh1 As Worksheet Dim sh2 As Worksheet Dim y As Long, x As Long, n As Long, m As Long Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") With sh1 y = Month(.Range("A2").Value) '月数 'A列は、日付書式になっていること m = .Cells(Rows.Count, 1).End(xlUp).Row End With With sh2 n = .Cells(Rows.Count, 1).End(xlUp).Row .Cells(2, y + 1).Resize(n - 1).FormulaLocal = "=SUMIF(" & sh1.Name & "!B2:B" & m & "," & sh2.Name & "!$A2:$A" & n & "," & sh1.Name & "!C2:C" & m & ")" '.Cells(2, y + 1).Resize(n - 1).Value = .Cells(2, y + 1).Resize(n - 1).Value ''値に変更 End With End Sub -------- TestMacro1の問題は、必ず、その月のデータは、空になっていることが条件になります。うっかり上書きしたら、累計されてしまいます。ClearContents が必要です。 TestMacro2の問題は、数式を入れる時の数式の煩雑さが否定できません。 元のデータに月が混在している場合は、うまくいきません。コードがまったく違ってきます。 このマクロの全体の問題点は、1月が2列目という決まっているという条件が必要です。 したがって、ある程度、マクロが書ける人でないと、このマクロの修正は難しいかもしれません。また、短いコードなのに、読みにくいです。もちろん、初歩的なマクロには違いありませんが。
お礼
回答ありがとうございます。 じっくり読んで、勉強させて頂きます。
VBAを使わなくても、クロス集計機能で処理できるのでは?
お礼
回答ありがとうございます。 確かにクロス集計でも可能ですよね。 言われて、「ハッ」としました。 でも、変なプライドでVBAを使ってみたく なってしまいました。
- TeferiMage
- ベストアンサー率0% (0/9)
◆実現方法 技術情報が載っているサイトで、プログラミングを『コピペ&調整』 http://www.excel-vba.net/ http://www.asahi-net.or.jp/~zn3y-ngi/ http://home.att.ne.jp/zeta/gen/excel/ ◆応用 基本的には、VBAなどに関わらず、 プログラミング系は、大体ネットにプログラムが載っていたりするので、 困ったらググるといいかもしれません。 ◆サイトの見つけ方 今回であれば、「Excel」「VBA」の2つをキーワードに入れて調べるといいと思います。 応用としては「プログラミング言語」と「ソース集」で調べたりするとよいかもしれません。 ◆他の方法 本屋で書籍を見つけるのも良いかもしれません。 ネットだと、上手く見つけられなかったり、見やすい表現がされていなかったりするので、 ネットで調べるのが苦手な人は、本を買うほうが良いのかもしれません。
お礼
回答ありがとうございます。 教えて頂いたサイト、参考にさせて頂きます。
お礼
回答ありがとうございます。 >セルの参照式みたいに特定のパターンで入力するものと混同してる感もありますが おっしゃる通りです。書き始める時、いつも頭の中がExcel計算式の考え方とごっちゃに なっています・・・