Excel VBA質問箱 IV

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

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


3112 / 13646 ツリー ←次へ | 前へ→

【64200】入力あり→日付表示 hnds12 10/1/25(月) 11:43 質問[未読]
【64201】Re:入力あり→日付表示 Jaka 10/1/25(月) 12:58 発言[未読]
【64202】Re:入力あり→日付表示 hnds12 10/1/25(月) 13:15 お礼[未読]
【64203】Re:入力あり→日付表示 UO3 10/1/25(月) 13:20 回答[未読]
【64205】老婆心ながら:入力あり→日付表示 UO3 10/1/25(月) 13:48 発言[未読]
【64207】Re:老婆心ながら:入力あり→日付表示 hnds12 10/1/25(月) 14:21 お礼[未読]
【64204】Re:入力あり→日付表示 ponpon 10/1/25(月) 13:25 発言[未読]
【64206】Re:入力あり→日付表示 hnds12 10/1/25(月) 14:17 お礼[未読]

【64200】入力あり→日付表示
質問  hnds12  - 10/1/25(月) 11:43 -

引用なし
パスワード
   A列に文字の入力が無い場合はA12セルを選択し、
入力がある場合は、J列に今日の日付を表示させたいのですが、
日付を表示させるのにかなり時間がかかります。
表示を速くさせる方法をご存知の方がいらしたら教えてください。

  x% = Range("A10000").End(xlUp).Row
  For i = 12 To x%
    If Cells(i, 1).Value = Empty Then
      Range("A12").Select
    Else
      Cells(i, 10).FormulaR1C1 = Format(Date, "yyyymmdd")
    End If
  Next

【64201】Re:入力あり→日付表示
発言  Jaka  - 10/1/25(月) 12:58 -

引用なし
パスワード
   あまり変わらないと思うけど。

>  x% = Range("A10000").End(xlUp).Row
   St = Format(Date, "yyyymmdd")
>  For i = 12 To x%
>    If Cells(i, 1).Value = Empty Then
>      'Range("A12").Select
>    Else
>      Cells(i, 10).value = St
>    End If
>  Next

と、書いた後、10000行ぐらいだったら、
SpecialCells(xlCellTypeConstants)
を使った方が速いかもしれないな?と思った。

【64202】Re:入力あり→日付表示
お礼  hnds12  - 10/1/25(月) 13:15 -

引用なし
パスワード
   少し早くなりました。
ありがとうございました!

【64203】Re:入力あり→日付表示
回答  UO3 E-MAIL  - 10/1/25(月) 13:20 -

引用なし
パスワード
   ▼hnds12 さん:

行数が多くなるとFor Nextでのまわしは、そのつど
ブック.Cellsの参照を裏でたどるわけでイライラするぐらい
遅くなりますね。できるだけ領域をまとめてドサっと一括で
処理することをお勧めします。
行ごとにA列がEmptyのとき、A12に戻しておられる意味が
わからないのですが、たぶんいらないと思えます。
であればJakaさんがいわれるように以下ではいかがでしょうかね。

Sub Test()
Dim x As Long
Dim myDate

  myDate = Format(Date, "yyyymmdd")
  x = Range("A10000").End(xlUp).Row
  Range("A12:A" & x).SpecialCells(xlCellTypeConstants).Offset(, 9) = myDate
  
End Sub

【64204】Re:入力あり→日付表示
発言  ponpon  - 10/1/25(月) 13:25 -

引用なし
パスワード
   スペシャルセルで

  Dim myR As Range
  
  Set myR = Range(Cells(12, 1), Cells(Rows.Count, 1).End(xlUp))
  St = Format(Date, "yyyymmdd")
  On Error Resume Next
  myR.SpecialCells(xlCellTypeConstants).Offset(, 9).Value = St
  On Error GoTo 0

【64205】老婆心ながら:入力あり→日付表示
発言  UO3 E-MAIL  - 10/1/25(月) 13:48 -

引用なし
パスワード
   hnds12さん

 変数にx%をお使いですが、一昔前まではエクセル行数の処理には
 Integer型変数で充分だったのですが今は(2003でも)この範囲に
 収まらない行数になってます。Long型を使うような習慣をお勧め
 します。

 それと・・ご提示のコードでA12をSelectしておられるところ。
 これは、何か勘違いをなさっているようですね。
 ご提示のコードの処理中、ActiveCellは動きませんので。

【64206】Re:入力あり→日付表示
お礼  hnds12  - 10/1/25(月) 14:17 -

引用なし
パスワード
   格段に早くなりました。ありがとうございました。

【64207】Re:老婆心ながら:入力あり→日付表示
お礼  hnds12  - 10/1/25(月) 14:21 -

引用なし
パスワード
   ご教授頂きましてありがとうございました。
格段と早くなりました。
A12をSelectしている部分はif文の中で
とりあえず何かを選択させなきゃいけないかと思い、
何も考えずに入れていた部分です。
またLong型についてもありがとうございました。

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