質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • VBA

    2372questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

エクセル VBA DoLoopとCellsの範囲指定について

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 969

cat_junko

score 36

いつもお世話になっております。
途中まで動くのですが処理途中でループで抜けてしまって最後
まで転記されません。

また、Rangeではなくてセル範囲の指定をCellsにしたいのですが
Cellsにするとエラーします。
そして、かっこいい構文ではありません。
※画像を、載せたいのですがうまくいかなかったので画像は
明日会社から貼り付けたいと思います。

Sub 交通誘導員配置実績転記()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Dim shD, shR
    Dim gyoD, gyoR
    Set shD = Worksheets("実績D")
    Set shR = Worksheets("実績R")
    gyoD = 4
    For gyoR = 7 To 62
        Do While shD.Cells(gyoD, 1) = shR.Cells(gyoR, 2)
        shR.Range("C" & gyoR & ":" & "J" & gyoR).Value = shD.Range("B" & gyoD & ":" & "I" & gyoD).Value
        gyoD = gyoD + 1
        Loop
    Next
    For gyoR = 7 To 68
        Do While shD.Cells(gyoD, 1) = shR.Cells(gyoR, 11)
        shR.Range("L" & gyoR & ":" & "S" & gyoR).Value = shD.Range("B" & gyoD & ":" & "I" & gyoD).Value
        gyoD = gyoD + 1
        Loop
    Next
    For gyoR = 7 To 61
        Do While shD.Cells(gyoD, 1) = shR.Cells(gyoR, 20)
        shR.Range("U" & gyoR & ":" & "AB" & gyoR).Value = shD.Range("B" & gyoD & ":" & "I" & gyoD).Value
        gyoD = gyoD + 1
        Loop
    Next
End Sub
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

>Rangeではなくてセル範囲の指定をCellsにしたいのですが Cellsにするとエラーします。 
shR.Cells("C" & gyoR & ":" & "J" & gyoR).Value
のような記載をされたのでしょうか?

Cellsは単一のセル指定に使うもので、セル範囲指定には使用できません。
セル範囲を指定できるのがRangeなので、Rangeを使いましょう。

またRangeの座標指定には、Cellsを使うこともできます。(おそらくやりたかったのはこれではないでしょうか。)

For gyoR = 7 To 62
    Do While shD.Cells(gyoD, 1) = shR.Cells(gyoR, 2)
        shR.Range(Cells(gyoR, 3), Cells(gyoR, 10)).Value = shD.Range(Cells(gyoD, 2), Cells(gyoD, 9)).Value
        gyoD = gyoD + 1
    Loop
Next

>途中まで動くのですが処理途中でループで抜けてしまって最後まで転記されません。

これについてはどんなシートで処理を回しているのかわからなければ何とも言えません。
可能性としては、見た目は同じに見えるけど実際には値が異なることでループ条件を満たさなくなり処理を抜けてしまうのではないか?というくらいです。
見た目が同じに見えるものとしては、
・全角と半角の違い
・スペースの有無
・未入力セルと空文字("")セル
などが代表的です。

デバッグ実行して意図せずループを抜けてしまうセルの内容がどんなものなのか確認すると良いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

>明日会社から貼り付けたいと思います
業務用コードであれば、Rage でも、Cells でも、セルアドレス指定は避けた方が無難です。
シート上のセルアドレスは、ある程度EXCELが面倒を見てくれますが、
VBA上のコードは、一切自動変更してくれません。
1.使用範囲のデータに範囲名を付けます。
2.可能な限り、完全修飾を行います。:ブック名、シート名、範囲名を
オブジェクト変数で使用します。
3.セルアドレス指定を行わず、セル範囲を範囲名で指定します。
4.ループでアクセスする場合は、vba range itemプロパティ で検索できる方法を使用します。
Range.Item プロパティ (Excel):検索例
https://msdn.microsoft.com/ja-jp/library/office/ff841096.aspx?f=255&MSPPError=-2147217396
但し、結合セルに対する制約に注意します。
5.なぜ、セルアドレス指定でなく、範囲名でアクセスするか?
業務用帳票は、改変があります、改変の度にVBA側のセルアドレスを変更するのは、
ミスも起きますし、作った方が居なくなったらという、問題も発生します。
上手に範囲名を使う事で、帳票変更時のコード変更を、少なくする事が可能です。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • VBA

    2372questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。