• 締切済み

エクセルで変数を用いてセルの移動

エクセルにおいて、たとえば上から順に検索していき、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

みんなの回答

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

シート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)
回答No.1

特におかしいところはありません。 私も試してみましたが、エラーは出ませんでした。 どのようなエラーが出るのですか?

関連するQ&A