過去ログ

                                Page     278
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼書式置換について  endo 02/10/29(火) 19:30
   ┗Re:書式置換について  りん 02/10/29(火) 20:48
      ┗Re:書式置換について  endo 02/10/30(水) 1:13
         ┗Re:書式置換について  りん 02/10/30(水) 8:21
            ┗Re:書式置換について  endo 02/10/30(水) 9:18
               ┗Re:書式置換について  りん 02/10/31(木) 8:40
                  ┗Re:書式置換について  endo 02/10/31(木) 10:41

 ───────────────────────────────────────
 ■題名 : 書式置換について
 ■名前 : endo
 ■日付 : 02/10/29(火) 19:30
 -------------------------------------------------------------------------
    初めて投稿します。よろしくお願いします。

  データが記号(○、□、☆等)で、その記号によって、書式のパターンを

 変えたいのですが、データ数が30000万件もあり、VBAで作成した

 マクロでは、時間がかかりすぎています。

 作成したマクロは、rowとcolumnをそれぞれforでループし、一つずつ検索
 
 していくという単純なものです。時間にして4分程度かかっています。

 以上、どなたか知っている方がいらっしゃれば教えてください。

 よろしくお願いします。

 環境:Excel2000
 OS:Windows2000
 ───────────────────────────────────────  ■題名 : Re:書式置換について  ■名前 : りん <rin_doggie@hotmail.com>  ■日付 : 02/10/29(火) 20:48  -------------------------------------------------------------------------
   endoさん、こんばんわ。

> 変えたいのですが、データ数が30000万件もあり、VBAで作成した
 3億件?

> マクロでは、時間がかかりすぎています。
 やりたいことと、現在の状況がわからないので、どんなコードか差しさわりのない程度に教えてください。
 ───────────────────────────────────────  ■題名 : Re:書式置換について  ■名前 : endo  ■日付 : 02/10/30(水) 1:13  -------------------------------------------------------------------------
   ▼りん さん レス有難うございます。

 そして、返信送れて申し訳ありません。

>> 変えたいのですが、データ数が30000万件もあり、VBAで作成した
> 3億件?
  すいません。3万件です。

> やりたいことと、現在の状況がわからないので、どんなコードか差しさわりのない程度に教えてください。

 ○○××○□□というデータがあったとしたら、○を背景を赤、×を青という風に
 書式設定のパターンを設定したいのです。

 赤赤青青赤黄黄 (例)

 コード(現在)

 Dim i as integer
 Dim j as integer

 for i = 0 to 30000
   for j = 0 to 111
     if(cells(i,j).value = "○") then
       cells(i,j).Interior.ColorIndex = 5
       ・
       ・
   next
next

 上記のように、セルを1つずつチェックしていき書式を設定するという処理
 を行っているのが現状です。

 よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:書式置換について  ■名前 : りん <rin_doggie@hotmail.com>  ■日付 : 02/10/30(水) 8:21  -------------------------------------------------------------------------
   endo さん、おはようございます。

> ○○××○□□
> 赤赤青青赤黄黄 (例)

 各セルにマークがひとつずつ入っていて、パターンが3つ(この場合は○△□)しかないのならば、わざわざマクロを組まなくても条件付き書式で簡単に対応できますよ。

適用範囲を選択してから、 書式 → 条件付き書式で

 条件1:セルの値が ○ パターンを赤
 条件2:セルの値が × パターンを青
 条件3:セルの値が □ パターンを黄

とするだけです。
 ───────────────────────────────────────  ■題名 : Re:書式置換について  ■名前 : endo  ■日付 : 02/10/30(水) 9:18  -------------------------------------------------------------------------
   りん さん おはようございます。

> 各セルにマークがひとつずつ入っていて、パターンが3つ(この場合は○△□)しかないのならば、わざわざマクロを組まなくても条件付き書式で簡単に対応できますよ。

>
>適用範囲を選択してから、 書式 → 条件付き書式で
>
> 条件1:セルの値が ○ パターンを赤
> 条件2:セルの値が × パターンを青
> 条件3:セルの値が □ パターンを黄
>
>とするだけです。

 レスありがとうございます。説明では3つのパターンでしたが、実際は10パターン
 あります。説明不足ですみません。

 処理の内容は、条件付き書式設定そのものなのですが、条件が多くて???の状態
 です。

 記号は 空白、●、■、J、○、□、p、P、∴、−、の10パターンです。
 何度もすみません。よろしくおねがいします。
 ───────────────────────────────────────  ■題名 : Re:書式置換について  ■名前 : りん <rin_doggie@hotmail.com>  ■日付 : 02/10/31(木) 8:40  -------------------------------------------------------------------------
   endoさん、おはようございます。
for i = 0 to 30000
   for j = 0 to 111
     if(cells(i,j).value = "○") then
       cells(i,j).Interior.ColorIndex = 5
       ・
       ・
   next
next

300万個のセルに対しての処理で、所要時間が4分だと十分速い気がしますが。
それに、行・列番号でゼロを指定したらエラーになると思いますけど...。

それはさておき。

Sub Test()
  On Error Resume Next
  Set r1 = Cells.SpecialCells(xlCellTypeConstants) '定数の入ったセルのみ
  On Error Goto 0
  '
  Application.ScreenUpdating = False
  If Not r1 Is Nothing Then
   For Each r2 In r1
     With r2
      Select Case .Value
        Case "●": .Interior.ColorIndex = 1 '好きな色番号を指定してね 
        Case "■": .Interior.ColorIndex = 2
        Case "J": .Interior.ColorIndex = 3
        Case "○": .Interior.ColorIndex = 4
        Case "□": .Interior.ColorIndex = 5
        Case "p": .Interior.ColorIndex = 6
        Case "P": .Interior.ColorIndex = 7
        Case "∴": .Interior.ColorIndex = 8
        Case "−": .Interior.ColorIndex = 9
        Case Else: .Interior.ColorIndex = 0
       End Select
     End With
    Next
   '
    Set r1 = Nothing
    Application.ScreenUpdating = True
  End If
End Sub

無駄なループを省くとしたらこんな感じでしょうか。

 ───────────────────────────────────────  ■題名 : Re:書式置換について  ■名前 : endo  ■日付 : 02/10/31(木) 10:41  -------------------------------------------------------------------------
   りん さん:

 レス、ありがとうございます。
 出来ました。高速です。本当にありがとうございました。

 行・列番号ゼロは愛嬌で。

 P.S
  Excel2002ではこの機能が置換で付いているようですね。

 ありがとうございました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 278