ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

EXCEL VBAコミュの別シートへ転記する方法

  • mixiチェック
  • このエントリーをはてなブックマークに追加
Sheet1(1枚目の画像)で登録した内容をSheet2(2枚目の画像)に転記するVBAを本を片手にチャレンジしていますが、基本からやっている訳ではないので行き詰ってしまいました(苦笑)

Sub 転記()
  Set MotoSht = Sheets("Sheet1")
  Set SakiSht = Sheets("Sheet2")
  MotoArreay = Array("C3","C5","C6","C7","C8","D8","C9")

  Set SakiRng = SakiSht.Range("A" & Rows.Count).End(xlUp).Offset(1)

  i = 0
  For Each myRng In MotoArray
    SakiRng.Offset(, i) = MotoSht.Range(MotoArray(i))
    i = i + 1
  Next

End Sub

と入力するとエラー(3枚目の画像)になります。

多分、この部分の[i]の意味が理解出来てないんだと思いますが
     ↓

  i = 0
  For Each myRng In MotoArray
    SakiRng.Offset(, i) = MotoSht.Range(MotoArray(i))
    i = i + 1

この部分をどのように直せばいいか教えて下さい。

コメント(25)

KYONさん こんばんは。

Basic言語の悪い点が出ていますね。
【大きな問題】
  MotoArreay = Array("C3","C5","C6","C7","C8","D8","C9")

  For Each myRng In MotoArray

上記の変数を見ると【MotoArreay】【MotoArray】が違います。

【注意事項】
 1.For Each myRng In MotoArray
   …………Range(MotoArray(i))

  これだと【myRng】の意味がないです。

   …………Range(myRng)
  普通はmyRngに取得した値を使うべきだと思います。

 2.BASIC(VBA)のコーディング
  BASICは変数の宣言をしなくても良いので【楽】はできます。
  プロはミスをなくすため、面倒でも変数宣言を必ずして
  実行時のミスを減らすようにしています。

  【例】
  Option Explicit
  Sub 転記()
   Dim I      As Integer
   Dim MotoSht  As Object
   Dim SakiSht  As Object
   Dim myRng   As Variant
   Dim MotoArray As Variant
   Dim SakiRng  As Range

   Set MotoSht = Sheets("Sheet1")
   Set SakiSht = Sheets("Sheet2")
   MotoArray = Array("C3", "C5", "C6", "C7", "C8", "D8", "C9")

   Set SakiRng = SakiSht.Range("A" & Rows.Count).End(xlUp).Offset(1)

   I = 0
   For Each myRng In MotoArray
    SakiRng.Offset(, I) = MotoSht.Range(myRng)
    I = I + 1
   Next

  End Sub

命令とかは、本で確認して勉強中してくださいね。
家に帰ってみてみたら、たいら氏の完璧すぐる回答に脱帽orz

取りあえず、2の【例】について一つだけ追加説明をば。。

1行目の[Option Explicit]って何ぞ!?
Helpを見れば一発でわかる話ではあるのですが、敢えて説明させてください。

この宣言をする意味。
⇒未宣言の変数が含まれている場合構文エラーとして、通知。

今回のようなケアレスミスの予防策として使います。

自分も知り合いに教えてもらうまで知らなかった宣言文です。
教えてもらってからは「おまじない」として必ず使うようになりました。

---- 以下Helpより転記 ----

Option Explicit ステートメント

モジュール内のすべての変数に対して、明示的な宣言を強制します。モジュール レベルで使用します。

構文

Option Explicit

解説

Option Explicit ステートメントを使う場合は、モジュール内のどのプロシージャよりも前に記述する必要があります。

モジュールで Option Explicit ステートメントを記述する場合、変数は、Dim、Private、Public、ReDim、Static などの各ステートメントで明示的に宣言する必要があります。宣言されていない変数名を使うと、コンパイル時にエラーが発生します。

Option Explicit ステートメントを使わない場合、Deftype ステートメントで既定のデータ型が指定されていないと、明示的に宣言されていない変数のデータ型は、すべてバリアント型 (Variant) になります。

メモ Option Explicit ステートメントを利用して、既存の変数名の入力ミスや、変数の適用範囲 (スコープ) がわかりにくいコード内で変数名の競合を避けることができます。

-----------------------
> Option Explicit

エディタの設定で自動的に入るようにできますよね手(チョキ)
>たいらさん
早々と回答ありがとうございます<(_ _)>
早速、修正して試してみたところ、ちゃんと転記出来ました♪
1個1個の意味はまだ理解出来ていませんが、
これからゆっくり調べて理解して行きたいなぁ〜って思っています(^^)
とても解りやすく、書いて頂いて本当に助かりました。

これから、検索出来るようにまた本で調べながら
悪戦苦闘して作成していくのですが、
また煮詰まった時には相談させて頂きますので、宜しくお願いします<(_ _)>
>>3
え゛!!まじで!!!

うっほwww
今まで使ってなかったwww

エディタの色を変更して黒背景にしたりとかはしてたけど、これはしらなんだww
と言うか無視してたww

あざーすww
>魔流さん
ホントにVBAって奥が深いんですね( ̄□ ̄;)
今はVBA書籍の中に似た手法の案件を見つけたら、
それを加工して利用する方法で作っているので基本をすっ飛ばしちゃってるので
こうやって、細かく教えて頂くとホントに嬉しいです。
仕事場では、とりあえすσ(^ー^)が1番理解してる人になってるので(苦笑)

解説して頂いた内容は、今のσ(^ー^)にはかなり難解ですが、
頑張って解読していきたいと思います。ありがとーございます<(_ _)>
>Lucy-こじゅ(classic) さん
さらに高度なテク?裏技?が・・・。
σ(^ー^)にはそれが、凄いことさえ解からない(⌒◇⌒;)
まだまだ遠いなぁ
>解説して頂いた内容は、今のσ(^ー^)にはかなり難解

orz

判りやすく言うと。

小学校とかでクラス名簿ってありますよね?
そこに載ってない生徒がクラスの中に居たらダメですよね?

この場合を例えを交えて説明すると

クラス名簿
⇒ 宣言 ・・・ Dim strText As String

生徒
⇒ 変数 ・・・ strText = "おれだよ!おれ!"

載ってない生徒
⇒ 未宣言変数 ・・・ strWorkBookName = "今、大変なんだ!100円振り込んでくれ!!"

strWorkBookName って誰よ!!


ようするにこう言う事です。(マテ、ヨケイニワカリニクイワ!!
Option Explicit

一言で言えば「変数の宣言を強制する」です。

「Option Explicit」を宣言しない場合

?変数の宣言での記入ミスがでる可能性があります。

?使用する変数がすべてバリアント型となります。

バリアント型は便利な型ではあるんですがファイル容量の増加やメモリ領域を占める割合が大きくなったり、処理スピードが低下するという問題点があります。

Option Explicitを宣言することで、

変数を何のデータ型で宣言かを理解しておく必要があります。

データ型の種類については下記リンクを参照下さい。

http://excelvba.pc-users.net/fol5/5_2.html

また変数の適用範囲についても理解しておく必要があります

http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_page4.htm#変数の適用範囲

ウォッチ式、ブレークポイント、ローカルウインドウ、イミディエイトウィンド
を使用できるようになればなお良いですが。




毎回頭に書いておいた方がいい一行を手入力する手間が省ける設定があります、という話です。
すごいというか小技ですね(^_^;)

ケータイからの書き込みなのでうろ覚えですが、多分 VBE の画面から、ツール、オプション、エディタ(タブ)と開いて、「変数の宣言を強制する」みたいなチェックボックスがあるはずなのでそこチェックすればいいです。
>Lucy-こじゅ(classic) さん

早速使ってみました!

VBE の画面から、ツール、オプション、編集(タブ)と開いて、「変数の宣言を強制する」のチェックボックスで出来ました。

私も変数をたくさん使うようになってから、知り合いに教えてもらって、いつも最初に記載していましたが、これは便利です。綴り間違いもないし・・・あせあせ
有難うございましたわーい(嬉しい顔)
薔さん
(字合ってるかな;)
お役に立ててよかったです!
正しいメニューの場所、ありがとうございます。

ちょっと意外だったんですが、実は知る人ぞ知るオプションなのかもですね(笑)
>強制宣言

まぁオプション化してなくても書く癖がつきましたし、
嫌が上にもスペル覚えてしまいましたよww

取りあえず知識として頂戴いたしますだ♪
>>[15]
どこまで出来ていて、どこが分からないのでしょうか?
>>[17]
削除しないで、何がどう問題だったのかを解説・報告すれば良いのに。
情報共有に協力する気が無いなら最初から投稿しない方が良い。
>>[17]
現状を確認したかっただけなのですが
伏字にされる意味が分かりませんね
しかも、削除するとは・・・
何がしたいのでしょうか
>>[20]
一体なぜ、「>>16 ○○男さん」と伏字にされたのか未だに理解が出来ないのですが
そして、現状を書かれていなかったため、把握しようと思い確認をしたのに
なぜ質問コメント自体を削除してしまったのか・・・
自己解決出来たのであれば、それはそれで質問を残し、このような状況で
このような壁にぶつかったが、このようにして解決したということを
コメントするのが良かったのではないのでしょうかね
>>[22]
>伏字にしたのは相手にたいしても対しても同じ思いの方がいるかもと思ったので、、
私は自分の名前(ハンドルネーム?)を伏字にされるほうが気分は良くはないですね
あなたは、「○○○"Padawan"さん」と表記されたほうが良いのでしょうか?

>削除したのは見やすくする意味もありました。 (スクロールなどで速く見れるように)
速く見ることは可能になりますが、見やすくはなくなるのでは?
削除されたことによって話の流れが見えなくなりますから
どんな書き込みがあって、それ以降のコメントになっているのか
ということが最初の書き込みを削除されて分かり易くなるのでしょうか?

ログインすると、残り6件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

EXCEL VBA 更新情報

EXCEL VBAのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。