Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11055 / 76734 ←次へ | 前へ→

【71220】Re:写真を指定して貼り付ける
発言  kanabun  - 12/2/11(土) 9:43 -

引用なし
パスワード
   ▼ようちゃん さん:

>【F列に数字を記載し、空白でなければA列に10を記入するプログラム】
>Sub Sample2()
> Dim j As Long
>
> For j = 1 To 100
> If Cells(j, 6) <> "" Then
> Cells(j, 1).Activate
>
>ActiveCell.Value = 10
>End If
>Next j
>End Sub
これはなかなか参考になるコードです。このコードを見ただけで、書いた
人がどの程度VBAに習熟しているかが分かりますから。では、これを材料
にして、コードの記述法一般についておさらいしておきましょう。

'【F列に数字を記載し、空白でなければA列に10を記入するプログラム】
▼インデントをつける
まずコードにはインデントを付けてください。Loopの始まりの Forと
Loopの終了の Next が同じ桁位置にくるように、また、その中のコードは
TABで一段、段下げします。
If〜End If も同じです。(内部を段下げします)
Sub Sample2b()
 Dim j As Long
 
 For j = 1 To 100
   If Cells(j, 6) <> "" Then
     Cells(j, 1).Activate
     ActiveCell.Value = 10
   End If
 Next j
End Sub

▼不用意にセルをアクティブにしない
 あるセルに値を書き込む処理のために、セルをアクティブにする
 操作は不要です。
  セル.Value = 値
 これだけで十分です。
▼空白の判定は IsEmpty関数をつかう
>  If Cells(j, 6) <> "" Then
 これは、セルが 長さ0 の文字列と等しくなかったら、という記述
 をしています。ほんとは セルの「値が Empty でなかったら」を
 判定したいのではありませんか? そういう時は 組み込み関数の
 IsEmpty()を使います。 "" という文字列と比較するのはそのもの
 ズバリの判定法ではありません。
Sub Sample2c()
 Dim j As Long
 
 For j = 1 To 100
   If Not IsEmpty(Cells(j, 6).Value) Then
     Cells(j, 1).Value = 10
   End If
 Next j
End Sub

▼For 〜Next よりも For Each 〜Next のほうが高速
 セル範囲などのようなオブジェクトのコレクション内をLoopする
 ときは、For Each 〜Next でLoopしたほうが高速です。
Sub Sample2d()
 Dim f As Range
 
 For Each f In Range("F1:F100")
   If Not IsEmpty(f.Value) Then
     f.EntireRow.Range("A1").Value = 10
   End If
 Next f
End Sub

▼Loopしないで一括処理できないか、考えてみる
 これまでのコードは範囲内のセルをひとつづつ順に調査して判定
 し、処理するコードを書いていました。
 やりたいことが F列範囲内の「文字列が書き込まれているセル」の
 A列に数値を代入する、 ということなら、Loopしないで処理を記述
 する方法があります。
 プロシージャ・コードの最初の
>  On Error Resume Next
 は、SpecialCellsメソッドが 「範囲内に文字列が書き込まれている
 セル」がひとつもなかったときはエラーが発生し、コードの実行が
 中断してしまうので、エラーがあっても Resumeしてつぎに進むよ
 う進行を制御しています。
Sub Sample2e()
 On Error Resume Next
 With Range("F1:F100").SpecialCells(xlConstants, xlTextValues)
   .Offset(, -5).Value = 10
 End With
End Sub

※本題については、別スレの UO3 さんのサンプルも参考になさりながら、
もうしばらくご自分であがいてみてくださいな

11 hits

【71205】写真を指定して貼り付ける ようちゃん 12/2/9(木) 15:50 質問
【71207】Re:写真を指定して貼り付ける kanabun 12/2/9(木) 19:05 発言
【71212】Re:写真を指定して貼り付ける ようちゃん 12/2/10(金) 15:56 回答
【71214】Re:写真を指定して貼り付ける kanabun 12/2/10(金) 18:55 発言
【71208】Re:写真を指定して貼り付ける kanabun 12/2/9(木) 20:12 発言
【71210】Re:写真を指定して貼り付ける UO3 12/2/9(木) 20:38 発言
【71215】Re:写真を指定して貼り付ける ようちゃん 12/2/10(金) 20:07 回答
【71216】Re:写真を指定して貼り付ける kanabun 12/2/10(金) 21:01 発言
【71217】Re:写真を指定して貼り付ける ようちゃん 12/2/10(金) 22:20 回答
【71220】Re:写真を指定して貼り付ける kanabun 12/2/11(土) 9:43 発言
【71229】Re:写真を指定して貼り付ける ようちゃん 12/2/11(土) 21:50 お礼

11055 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free