[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAでのコピーアンドペーストのエラー』(もりりん)
当方初心者でして、コピーアンドペーストで躓いております、宜しくお願いします
Sub seiretu()
Dim col '列数カウンタ
Dim row '行数カウンタ
Dim ncol '次の列数カウンタ
Dim nrow '次の行数カウンタ
Dim gen 'ループ数
Sheets("行集計").Select Set gen = Range("B2") Sheets("行整列").Select Range("A2").Select 'A2セルを初期位置に設定 col = 0 row = 0 nrow = 0
Do While gen >= col If ActiveCell = "" Then ActiveCell.Offset(-row, 1).Select col = col + 1 nrow = row row = 0 Else Selection.Copy ActiveCell.Offset(nrow, 21 - col).Select 1→ Selection.Paste ActiveCell.Offset(1 - nrow, -21 + col).Select row = row + 1 End If Loop
End Sub
複数の列の一定数でない内容を一列にまとめるというような内容でマクロを組んでみたところ1のところで
実行時エラー'438':
オブジェクトは、このプロパティまたはメソッドをサポートしていません。
と表示されます
見苦しいとは思いますが宜しくお願い致します
< 使用 Excel:Excel2007、使用 OS:Windows7 >
どういうデータかわかりませんが、 SelectやActiveはやめましょう! 型宣言はちゃんとしておきましょう! なんとなくやりたいことはこうかしら?というものを書き直したのでいかがです? それでもちょっとわかりにくいので、実データもらえると助かります。
Sub seiretu() Dim col As Long '列数カウンタ Dim row As Long '行数カウンタ Dim ncol As Long '次の列数カウンタ Dim nrow As Long '次の行数カウンタ Dim gen As Long 'ループ数 Dim r As Range gen = Sheets("行集計").Range("B2").Value Set r = Sheets("行整列").Range("A2") 'A2セルを初期位置に設定 col = 0 row = 0 nrow = 0
Do While gen >= col If r.Value = "" Then Set r = r.Offset(-row, 1) col = col + 1 nrow = row row = 0 Else r.Offset(nrow, 21 - col).Value = r.Value Set r = r.Offset(1 - nrow, -21 + col) row = row + 1 End If Loop End Sub
(稲葉) 2019/01/17(木) 19:34
済みません見直したところB2の指定は間違いでB1でした
稲葉様の書き直して頂いたものでデバッグを行うと
Set r = r.Offset(1 - nrow, -21 + col)
この一節で
実行時エラー'1004'
アプリケーション定義またはオブジェクト定義エラーですとなりました
各変数に入るのは基本が数字になりますが
変数rに格納するのは文字列になります
そのせいなのかはわかりませんが参考になればと思います
実データをお渡ししたいとは思うのですが
データ添付がわからず申し訳ありません
(もりりん) 2019/01/18(金) 09:26
>変数rに格納するのは文字列になります
いえ、変数に格納される(されている)のはセル(範囲)というオブジェクトです。
コレを踏まえると
>Set r = r.Offset(1 - nrow, -21 + col)
>この一節で
>実行時エラー'1004
>アプリケーション定義またはオブジェクト定義エラーですとなりました
↑は、Offsetした結果、あり得ないセルを指定してしまったため、エラーになったものと思われます。
例: rに格納されているのがA2セルの場合 r.Offset(-1,0).Address(0,0) → A2セルの一つ上のA1セルのアドレスが返され成功 r.Offset(0,-1).Address(0,0) → A列より左にセルが無いのでエラー発生
なので、ローカルウィンドウやイミディエイトウィンドウを使って「r」「nrow」「col」にそれぞれ何が格納されているか確認してみてください。
また、私見になりますが、ファイルをどこかにアップロードしてリンクを張るのは規約上NGではないようですけど、セキュリティの観点から見ないという方針の回答者さんも一定数おられるようにおもいますので、なるべくなら頑張って文字で再現されたほうがよいとおもいます。
その場合、各行の先頭に半角スペースを入れると、上記の「例」部分のようにちょっと小さめの文字で改行されずに表示されるようになります。
(もこな2) 2019/01/18(金) 12:36
Sub seiretu()
Dim col As Long '列数カウンタ Dim row As Long '行数カウンタ Dim nrow As Long '次の行数カウンタ Dim gen As Long 'ループ数 Dim r As Range gen = Sheets("行集計").Range("B1").Value Set r = Sheets("行整列").Range("A2") 'A2セルを初期位置に設定 col = 0 row = 0 nrow = 0 Do While gen >= col If r.Value = "" Then Set r = r.Offset(-row, 1) col = col + 1 nrow = nrow + row row = 0 Else r.Offset(nrow, 26 - col).Value = r.Value Set r = r.Offset(1, 0) row = row + 1 End If Loop End Sub
(もりりん) 2019/01/18(金) 13:58
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.