- 締切済み
エクセルで変数を用いてセルの移動
エクセルにおいて、たとえば上から順に検索していき、14番目をほかのシートにコピーしたいときに、以下の記述ではまずいでしょうか。 基本的にrangeやCellsの中に変数を組み込む方法がわかりません。 以下の方法で行うと、エラーが帰ってきました。 For J = 1 To 100 + 1 Select Case J Case 14 Sheets("kanryou").Select Range(Cells(J + Endd, 1), Cells(J + Endd, 1)).Select Selection.Copy Sheets("nukitori").Select Range(Cells(K, 1), Cells(1, 1)).Select ActiveSheet.Paste Application.CutCopyMode = False K = K + 1 Case Else End Select Next
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- nishi6
- ベストアンサー率67% (869/1280)
シートkanryouからnukitoriに転記するとして考えました。 まず、このコードが書かれている場所で違ってくると思います。 (1)シートのコードウインドウに書いた場合は、Range(Cells(k, 1), Cells(1, 1)).Select でエラー? 理由はシートを切り替えているからです。 (2)標準モジュールに書いた場合は、kが設定されていなければCells(k, 1)でエラー? Kを設定した場合は動くと思いますが(Enddもどこかでセット?)、k=1 の場合は1行目に書かれますが、 k=n の場合は1行目からn行目まで14行目の数値で埋まると思われます。(これが目的?) Select Case が使ってあるので、14以外にも書きこむ場合は、最後に指定した行数にある値で全てが埋められるはずです。 上記はRange(Cells(k, 1), Cells(1, 1))の意味、目的が不明なため推測です。 A列のK行目に書くならCells(k, 1)で大丈夫でしょう。 参考に同じような機能を作ってみました。変数もなるべく同じにしています。Copy等は使っていません。 標準モジュールに貼り付けます。参考になる? (質問から、処理を推測して書いています。違っていたら読み飛ばしてください) Public Sub sheet2sheetCopy() Dim ws0, ws1 As Worksheet 'ワークシート Dim LastRow As Long '対象とする最後の行数 Dim J As Long 'カウンタ Dim K As Long 'コピー先行数 Dim Endd As Long '開始行??? Endd = 0 K = 1 LastRow = 100 Set ws0 = Worksheets("kanryou") 'ws0からws1にコピー Set ws1 = Worksheets("nukitori") ws0.Select For J = 1 To LastRow Select Case J Case 14, 28, 42, 66 ws1.Cells(K, 1) = ws0.Cells(J + Endd, 1) K = K + 1 Case Else End Select Next End Sub
- paku_i
- ベストアンサー率38% (19/49)
特におかしいところはありません。 私も試してみましたが、エラーは出ませんでした。 どのようなエラーが出るのですか?