Excel VBA質問箱 IV

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

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


349 / 3841 ページ ←次へ | 前へ→

【75440】Re:値の貼り付け方法(上位3位までのセ...
質問  りんご  - 14/3/27(木) 3:17 -

引用なし
パスワード
   ありがとうございました。
上位3位までの色付け完了しました。「条件付き書式を予め設定」の意味は
参照の値を計算するよう当該セルに条件書式に設定するの意味でしょうか?すみませんが、まだ試していないでの質問です。

>質問の後、若干変更がありました。
  >抽出条件を入力するセルは"GG1:GI2"は場所を変更しました。
  >人数あん分もキロからグラムで表示するよう変更しました 
  >計算エラー表示をゼロ値表示にしました IF(ISERR(
>追加の質問ですが、以前にご指導いただいたマクロですが、入力項目(R7:V23)に値がないときに処理を中断するつもりで、式を張付ましたがうまくいきません。 このやり方は何が問題なのでしょうか?
理解できていないのでよろしくお願いします。

Sub 残菜まとめて登録()

  Dim 登録 As Worksheet, 当月 As Worksheet
  Dim 月 As Long, 日 As Long
  Dim 縦 As Long, 最終行 As Long
  Dim msg As Long
  Dim 行 As Long
 
  Set 登録 = Worksheets("登録")
  月 = 登録.Cells(4, 18).Value
  日 = 登録.Cells(4, 20).Value
  
    If WorksheetFunction.CountBlank(Range("R7:V23")) > 0 Then
     MsgBox "登録データがありません"
     Exit Sub
    End If

  
  msg = MsgBox("入力内容を登録月" & 月 & "シートに転送します。" & vbCrLf & "よろしいですか?", vbOKCancel + vbExclamation, "入力内容の転送")
  If msg <> vbOK Then MsgBox "操作を中断しました": Exit Sub
 
  Set 当月 = Worksheets("登録月" & 月)
  縦 = 7
  Do Until 当月.Cells(縦, 20).Value = ""
    縦 = 縦 + 1
  Loop

  If WorksheetFunction.CountIf(当月.Range(当月.Cells(7, 20), 当月.Cells(縦, 20)), 日) >= 1 Then
    msg = MsgBox("この日付はすでに使用されています ", vbOKOnly + vbCritical)
    If msg = vbOK Then Exit Sub
  
  End If
      (以下 略)
・ツリー全体表示

【75439】Re:値の貼り付け方法(上位3位までのセ...
発言  マナ  - 14/3/26(水) 21:26 -

引用なし
パスワード
   ★ClearContentsする範囲を修正して再投稿

条件付き書式を予め設定しておけばよいと思います。
同様に、式も毎回マクロで設定しなくても良いです。
予め入力しておけば、終行を使わないで、コードも簡潔になります。

ところで抽出条件を入力するセルは"GG1:GI2"ではないのですか?

Sub 抽出当月()
 
  If WorksheetFunction.CountBlank(Range("GG1:GI2")) > 0 Then
    MsgBox "抽出期間を設定して下さい"
    Exit Sub
  End If
  
  Application.ScreenUpdating = False
  
  Range("B7:H31").ClearContents  '★

  Range("T6:Z400").AdvancedFilter _
    Action:=xlFilterInPlace, _
    CriteriaRange:=Range("GG1:GI2"), _
    Unique:=True
  Range("T6:Z400").Copy
  Range("B6").PasteSpecial Paste:=xlPasteValues
  ActiveSheet.ShowAllData

  If Range("B7") = "" Then
    Range("B2").Select
    MsgBox "何も抽出されませんでした"
    Exit Sub
  End If
  
  Range("B6:H31").Sort _
    Key1:=Range("B6"), _
    Order1:=xlAscending, _
    Header:=xlYes

  Range("R4").Select
  
  Application.ScreenUpdating = True

End Sub
・ツリー全体表示

【75438】Re:値の貼り付け方法(上位3位までのセ...
質問  りんご  - 14/3/26(水) 6:15 -

引用なし
パスワード
   ありがとうございました。感激です。利用させていただきます。
追加の質問になりますが、
   抽出データにより作成された N7:R31のデータに対し
   項目(key1=N6、key2=O6、key3=p6,、ey4=R6)の各列の第3位までのセルに   色をつける場合(できれば、colorindex3、33、36複雑になるときは1色)
各列に対し3個のlage式が必要ですか?それとも、データセルが3個以上の場合sortして色をつけ再度 日にちをkeyに並べ替えると考えるのでしょうか?
なかなか、理解できない初心者です。よろしくお願いします
ちなみに前回のマクロはこのように

Sub 抽出当月()
'
  Dim 終行 As Long
  Application.ScreenUpdating = False

 If WorksheetFunction.CountBlank(Range("H4:I4")) > 0 Then
  MsgBox "抽出期間を設定して下さい"
  Exit Sub
End If
  Range("B7:R31").ClearContents
  Range("T6:Z400").AdvancedFilter _
    Action:=xlFilterInPlace, _
    CriteriaRange:=Range("GG1:GI2"), _
    Unique:=True
  Range("T6:Z400").Copy
  Range("B6").PasteSpecial Paste:=xlPasteValues
  ActiveSheet.ShowAllData
    終行 = Range("b31").End(xlUp).Row
   If 終行 = 6 Then
   Range("b2").Select
  MsgBox "何も抽出されませんでした"
  Exit Sub
End If
  Range("B6:H" & 終行).Sort _
    Key1:=Range("B6"), _
    Order1:=xlAscending, _
    Header:=xlYes
 
  Range("i7:i" & 終行).Formula = "=Sum(E7:H7)"
 
  Range("n7:r" & 終行).FormulaR1C1 = "=IF(ISERROR(ROUNDDOWN(RC[-9]*1000/RC4,1)),0, ROUNDDOWN(RC[-9]*1000/RC4,1)) "

  Range("b7", "d" & 終行).Copy
  Range("k7").PasteSpecial xlPasteValues
  Application.CutCopyMode = False
    Range("r4").Select
  Application.ScreenUpdating = True

End Sub
・ツリー全体表示

【75437】Re:順序よく、エクセルから画像を取り出す
回答  ちび坊主  - 14/3/25(火) 16:07 -

引用なし
パスワード
   昔作った、どこにでもあるSortで横位置にも対応してみた。

Sub test02()
 Dim Pic As Picture
 Dim i As Long
 ReDim PicList(0 To ActiveSheet.Pictures.Count - 1, 0 To 2) As Variant
 
 For Each Pic In ActiveSheet.Pictures
  PicList(i, 0) = Pic.Name
  PicList(i, 1) = Pic.Left
  PicList(i, 2) = Pic.Top
  i = i + 1
 Next
 
 Call BubbleSort(PicList, 1)
 Call BubbleSort(PicList, 2)
 
 For i = 0 To ActiveSheet.Pictures.Count - 1
  ActiveSheet.Pictures(PicList(i, 0)).ShapeRange.ZOrder msoBringToFront
 Next
 
End Sub


Sub BubbleSort(ByRef Ary() As Variant, ByVal key As Long)
 Dim swap As Variant
 Dim i As Long
 Dim j As Long
 Dim k As Long
 
 For i = LBound(Ary, 1) To UBound(Ary, 1)
  For j = UBound(Ary, 1) To i Step -1
   If Ary(i, key) > Ary(j, key) Then
    For k = LBound(Ary, 2) To UBound(Ary, 2)
     swap = Ary(i, k)
     Ary(i, k) = Ary(j, k)
     Ary(j, k) = swap
    Next
   End If
  Next
 Next
End Sub

左上から右へと並び替えてます。
下へ向かうなら、
Call BubbleSort(PicList, 2)
Call BubbleSort(PicList, 1)
キーの順番を変えてください。
・ツリー全体表示

【75436】Re:順序よく、エクセルから画像を取り出す
回答  ちび坊主  - 14/3/25(火) 13:27 -

引用なし
パスワード
   こんにちは。

試した感じでは、画像のZorder順で名付けられるようです。

Sub test()
 Dim PicList As Object
 Dim Pic As Picture
 Dim i As Long
 
 
 Set PicList = CreateObject("System.Collections.SortedList")

 For Each Pic In ActiveSheet.Pictures
  PicList.Add Pic.Top, Pic.Name
 Next
 
 For i = 0 To PicList.Count - 1
  ActiveSheet.Pictures(PicList.GetByIndex(i)).ShapeRange.ZOrder msoBringToFront
 Next
 
 Set PicList = Nothing
End Sub

たたき台程度で。

画像のTopと名前を取り込み、Top順で名前を並べ替えて、
その名前順でZorderを変えています。

同じTopの画像があった場合には、Indexが若い方は無視されます。
・ツリー全体表示

【75435】Re:以前作って頂いた物の改変(複雑です)
お礼  初心者M  - 14/3/25(火) 9:46 -

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

わざわざ参考サイトまで提示して下さって有り難うございます。
初心者向けの教本はいくつか買ったのですが、Dictionaryオブジェクトはkanabunさんに教えて頂くまで全く知りませんでした。とても便利なものですね。
今回私がやりたかったことにも合致していますし、必要なものだと思いました。

こちらで頑張って勉強してみたと思います。
本当に、有り難うございました。
・ツリー全体表示

【75434】Re:以前作って頂いた物の改変(複雑です)
発言  kanabun  - 14/3/24(月) 17:38 -

引用なし
パスワード
   ▼初心者M さん:

>質問の趣旨から外れてしまうのですが、問題があるとすれば、運用する私の知識が全然追いついていないという1点です。
>kanabunさんの様に、知識と技術のある親切な方にいつでも頼れるわけではないので、なんとか自分でも「こういうコードを使えば、こういうことができる」という知識を身につけたいのですが、どのような部分から手を付ければよいか、ご参考までにお教え頂けないでしょうか。例えば、「数値が入っているか」を判別するためにWorksheetFunctionを使うなど、私では到底思いつきません。

これはぼくからの非常に個人的なお願いなのですが、
ぜひ習得してほしいのは Dictionaryオブジェクトの利用法です。
こちらはDictionaryの利便性、高速性にどっぷりつかっているので、
AdvancedFilter や ピボットテーブルの分野まで侵入して
Dictionaryを使ったコードを書くことがあります。
質問者のかたが Dictionaryをまるで知らないと、そのコードは
タダで作ってもらった変更の利かない道具ですが、すこしでも
Dictionaryを使ったコードの書き方をみていると、ははぁ、こ
こで、こういうふうにDictionaryを使うのだな。では、それを
まねて、こういう目的のためにDictionaryを使ってやろう。
という気になってきますので、かいとうする側としては非常に
提示しがいのある回答になります。
Dictionaryを一から説明せよ、と言われても、それはなかなか
難しいです。
具体例とともに、少しずつ慣れていくのが得策かと思います。
ぼくがそうでしたから。

●Dictionaryオブジェクトを使うと重複のあるリストから、一意の
リストを取得することができます。

みかん        みかん
りんご        りんご
バナナ        バナナ
みかん    ==⇒ なし
なし         
バナナ        
みかん        


● Dictionaryオブジェクトを使うと(今回のように)キーの
出現回数をカウントすることもできます。

For Each key In リスト
   dic(key) = dic(key) + 1
Next
[F1].Resize(dic.Count, 2).Value = Application.Transpose( _
  Array(dic.Keys(), dic.Items())


● Dictionaryオブジェクトを使うと、集計作業ができます。
品名   売上
みかん  1000
りんご  1200
バナナ  1500
みかん  2000
なし   1000
バナナ  5000
みかん  2000

For Each 品名 In テーブル.列(1)
   dic(品名) = dic(品名) + 売上
Next
[F1].Resize(dic.Count, 2).Value = Application.Transpose( _
  Array(dic.Keys(), dic.Items())

参考サイト
ht tp://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_dictionary.html
ht tp://officetanaka.net/excel/vba/tips/tips80.htm
・ツリー全体表示

【75433】Re:以前作って頂いた物の改変(複雑です)
お礼  初心者M  - 14/3/24(月) 14:10 -

引用なし
パスワード
   ▼kanabun さん:
>> kanabun - 14/3/24(月) 11:40
>
>で試してみてください。


失礼しました。
とても軽快に動きますし、無視すべきもの、警告すべきものも完璧に表示されています。
本当に有り難うございました。

質問の趣旨から外れてしまうのですが、問題があるとすれば、運用する私の知識が全然追いついていないという1点です。
kanabunさんの様に、知識と技術のある親切な方にいつでも頼れるわけではないので、なんとか自分でも「こういうコードを使えば、こういうことができる」という知識を身につけたいのですが、どのような部分から手を付ければよいか、ご参考までにお教え頂けないでしょうか。例えば、「数値が入っているか」を判別するためにWorksheetFunctionを使うなど、私では到底思いつきません。

よろしくお願いいたします。
・ツリー全体表示

【75432】Re:以前作って頂いた物の改変(複雑です)
発言  kanabun  - 14/3/24(月) 13:48 -

引用なし
パスワード
   > kanabun - 14/3/24(月) 11:40

で試してみてください。
・ツリー全体表示

【75431】Re:以前作って頂いた物の改変(複雑です)
発言  初心者M  - 14/3/24(月) 11:49 -

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

>ああ、よかった。
>こちらのミスでした。

ミスなんですか?
ちゃんと動いていたようですが、前と何がどう変わって、何の動きが違うのか、理解するまで時間がかかりそうです。


>それと、動作的には問題なくなったようですが、数値欄で空白セルを数値
>0 として毎回 最大値をチェックするのはもったいないので、さらにコードを
>見直してみますので、しばらくお待ちください。。。

更に高速化するということですかね。
今でも充分速いように思うのですが、話が高度すぎて、もはやすごいという言葉しか出てこないです。
・ツリー全体表示

【75430】Re:以前作って頂いた物の改変(複雑です)
発言  kanabun  - 14/3/24(月) 11:40 -

引用なし
パスワード
   以下で試してみてください。
何かあれば、お願いします。

Sub test73() '品名 出現回数をカウント
 Dim n As Long, p As Long
 Dim y As Long, x As Long
 Dim i As Long, k As Long
 Dim ss As String
 Dim c As Range
 Const Y0 = 8, YY = 84, Ystp = 16 '縦方向 最初の行番・Loop回数・Step数
 Const X0 = 3, XX = 27, Xstp = 3 '横方向 最初の列番・Loop回数・Step数
 Dim dic(1 To 3) As Object
 Set dic(1) = CreateObject("Scripting.Dictionary") '試作品グループ
 Set dic(2) = CreateObject("Scripting.Dictionary") '製品グループ
 Set dic(3) = CreateObject("Scripting.Dictionary") '特別品グループ
 Dim nc As Object
 Set nc = CreateObject("Scripting.Dictionary")
 Dim NCMAX As Long
 
 ActiveSheet.UsedRange.Interior.ColorIndex = xlNone
 NCMAX = [X1].Value
 NCMAX = Val(InputBox$("最大出現回数", , NCMAX))
 If NCMAX < 1 Then Exit Sub
 
 '◆まずC列のキー別に、1段目、2段目、3段目別に、最大値を求める
 For x = X0 To X0 + (XX - 1) * Xstp Step Xstp
  For y = Y0 To Y0 + (YY - 1) * Ystp Step Ystp
   For i = 2 To 8 Step 3 '[C8]セルを1行目として
    Set c = Cells(y, x).Item(i, 1) '2,5,8行目
    'ただし D列に数字が入っていたら
    If WorksheetFunction.IsNumber(c(1, 2)) Then
      '「何もしない」塗りつぶすだけ
      c.Resize(, 2).Interior.Color = vbGreen
    Else
      ss = c.Value
      If Len(ss) > 0 Then
       nc(ss) = nc(ss) + 1 '◆出現回数のカウント
       For k = 1 To 3  '記号のある行の-1行〜2行までの3行
        p = c.Offset(k - 2, 2).Value2 'E列の数値
        If p > 0& Then    '空白でなかったら
          n = WorksheetFunction.RoundUp(p, -2)
          If Not dic(k).Exists(ss) Then 'keyが無ければ登録
            dic(k)(ss) = n     'その行の数値を登録
          ElseIf dic(k)(ss) < n Then 'すでにキーのあるとき
            'この行のnがこれまでの最大値より大きければ
            dic(k)(ss) = n '最大値の更新
          End If
        ElseIf Not dic(k).Exists(ss) Then
          dic(k)(ss) = Empty
        End If
       Next k
      End If
    End If
   Next i
  Next y
 Next x

 '◆求まったキー別最大値で元表の数値列を更新
 For x = X0 To X0 + (XX - 1) * Xstp Step Xstp
  For y = Y0 To Y0 + (YY - 1) * Ystp Step Ystp
   For i = 2 To 8 Step 3 '[C8]セルを1行目として
    Set c = Cells(y, x).Item(i, 1) '2,5,8行目
    'ただし D列に数字が入っていたら
    If WorksheetFunction.IsNumber(c(1, 2)) Then
      '「何もしない」
    Else
      ss = c.Value
      If Len(ss) > 0 Then
       For k = 1 To 3 '記号のある行の-1行〜2行までの3行
         c.Offset(k - 2, 2).Value = dic(k)(ss)
       Next k
       If nc(ss) > NCMAX Then
         c.Interior.Color = vbRed '制限数超過
       End If
      End If
    End If
   Next i
  Next y
 Next x
  
 MsgBox "持ち上げが完了しました。" & vbCr _
   & "掛け数の設定されている台は、手集計して下さい"

End Sub
・ツリー全体表示

【75429】Re:以前作って頂いた物の改変(複雑です)
発言  kanabun  - 14/3/24(月) 11:30 -

引用なし
パスワード
   ▼初心者M さん:
>
>これだと、ばっちり赤くなりました!
>今までは、何がまずかったのでしょうか??

ああ、よかった。
こちらのミスでした。

>      nc(ss) = nc(ss) + 1 '出現回数のカウント

(まえ 2か所にあったこの文を)一行にまとめ、位置を変えてみました。

それと、動作的には問題なくなったようですが、数値欄で空白セルを数値
0 として毎回 最大値をチェックするのはもったいないので、さらにコードを
見直してみますので、しばらくお待ちください。。。
・ツリー全体表示

【75428】Re:以前作って頂いた物の改変(複雑です)
お礼  初心者M  - 14/3/24(月) 11:10 -

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


>記号の出現回数のカウントを 1つにしましたので、
>これを使って流すとどうなりますか?

これだと、ばっちり赤くなりました!
今までは、何がまずかったのでしょうか??
・ツリー全体表示

【75427】Re:以前作って頂いた物の改変(複雑です)
発言  kanabun  - 14/3/24(月) 10:54 -

引用なし
パスワード
   ▼初心者M さん:

>このファイルの場合、「試作品」と「製品」「特別版」は別々に作るので、8行目に数字が入っている場合は9,10行目には何も入りませんし、その逆の場合も同じです。「試作品」だけのシート、「製品版(特別版)」だけのシート、というように、別物になります。
>
なるほど、そういうことでしたか。これについては了解です。

>>「繰り上げが必要なのは1個だけです。」というのは、サンプルデータで
>>「IJK列の9,10行の」データということですよね?
>
>その通りです。ここをバラバラの数値にすると、上手く動いてくれるようなのですが・・・
ここがやはり分りません(ToT)

記号の出現回数のカウントを 1つにしましたので、
これを使って流すとどうなりますか?

Sub test72() '品名 出現回数をカウント
 Dim n As Long
 Dim y As Long, x As Long
 Dim i As Long, k As Long
 Dim ss As String
 Dim c As Range
 Const Y0 = 8, YY = 84, Ystp = 16 '縦方向 最初の行番・Loop回数・Step数
 Const X0 = 3, XX = 27, Xstp = 3 '横方向 最初の列番・Loop回数・Step数
 Dim dic(1 To 3) As Object
 Set dic(1) = CreateObject("Scripting.Dictionary") '試作品グループ
 Set dic(2) = CreateObject("Scripting.Dictionary") '製品グループ
 Set dic(3) = CreateObject("Scripting.Dictionary") '特別品グループ
 Dim nc As Object
 Set nc = CreateObject("Scripting.Dictionary")
 Dim NCMAX As Long
 
 ActiveSheet.UsedRange.Interior.ColorIndex = xlNone
 NCMAX = [X1].Value
 NCMAX = Val(InputBox$("最大出現回数", , NCMAX))
 If NCMAX < 1 Then Exit Sub
 
 '◆まずC列のキー別に、1段目、2段目、3段目別に、最大値を求める
 For x = X0 To X0 + (XX - 1) * Xstp Step Xstp
  For y = Y0 To Y0 + (YY - 1) * Ystp Step Ystp
   For i = 2 To 8 Step 3 '[C8]セルを1行目として
    Set c = Cells(y, x).Item(i, 1) '2,5,8行目
    'ただし D列に数字が入っていたら
    If WorksheetFunction.IsNumber(c(1, 2)) Then
      '「何もしない」塗りつぶすだけ
      c.Resize(, 2).Interior.Color = vbGreen
    Else
      ss = c.Value
      If Len(ss) > 0 Then
       nc(ss) = nc(ss) + 1 '出現回数のカウント
       For k = 1 To 3  '記号のある行の-1行〜2行までの3行
        n = WorksheetFunction. _
          RoundUp(c.Offset(k - 2, 2).Value, -2)
        If Not dic(k).Exists(ss) Then 'keyが無ければ登録
          dic(k)(ss) = n        'その行の数値を登録
        ElseIf dic(k)(ss) < n Then 'すでにキーのあるとき
          'この行のnがこれまでの最大値より大きければ
          dic(k)(ss) = n '最大値の更新
        End If
       Next k
      End If
    End If
   Next i
  Next y
 Next x

 '◆求まったキー別最大値で元表の数値列を更新
 For x = X0 To X0 + (XX - 1) * Xstp Step Xstp
  For y = Y0 To Y0 + (YY - 1) * Ystp Step Ystp
   For i = 2 To 8 Step 3 '[C8]セルを1行目として
    Set c = Cells(y, x).Item(i, 1) '2,5,8行目
    'ただし D列に数字が入っていたら
    If WorksheetFunction.IsNumber(c(1, 2)) Then
      '「何もしない」
    Else
      ss = c.Value
      If Len(ss) > 0 Then
       For k = 1 To 3 '記号のある行の-1行〜2行までの3行
         c.Offset(k - 2, 2).Value = dic(k)(ss)
       Next k
       If nc(ss) > NCMAX Then
         c.Interior.Color = vbRed '制限数超過
       End If
      End If
    End If
   Next i
  Next y
 Next x
  
 Dim v
 For Each v In nc.Keys()
   Debug.Print v, nc(v)
 Next
 
 MsgBox "持ち上げが完了しました。" & vbCr _
   & "掛け数の設定されている台は、手集計して下さい"

End Sub
・ツリー全体表示

【75426】Re:以前作って頂いた物の改変(複雑です)
発言  初心者M  - 14/3/24(月) 10:40 -

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


>では、8行目の 数値の列(E,H,K...) は 何が入っているのですか?
>その位置にも 適当な数字(すべて同じ数字)を入れて、再度、試しましたが、
>ちゃんと赤く塗りつぶされます。

このファイルの場合、「試作品」と「製品」「特別版」は別々に作るので、8行目に数字が入っている場合は9,10行目には何も入りませんし、その逆の場合も同じです。「試作品」だけのシート、「製品版(特別版)」だけのシート、というように、別物になります。


>「繰り上げが必要なのは1個だけです。」というのは、サンプルデータで
>「IJK列の9,10行の」データということですよね?

その通りです。ここをバラバラの数値にすると、上手く動いてくれるようなのですが・・・
・ツリー全体表示

【75425】Re:以前作って頂いた物の改変(複雑です)
発言  kanabun  - 14/3/24(月) 10:33 -

引用なし
パスワード
   再現できないまま終わるのは悲しいので...
再度お伺いします。

[X1]に入っている数値の意味?

全部を調べたあと、C列など記号列の記号の出現回数が [X1]列の数値以上なら
赤で塗りつぶす。と考えてました。

E列など数値列の数値が同じとか、何も書かれていないとか、そういう数値列の
数値が影響して C列の記号を塗りつぶさなくなることってあるんですか??
・ツリー全体表示

【75424】Re:以前作って頂いた物の改変(複雑です)
質問  kanabun  - 14/3/24(月) 10:22 -

引用なし
パスワード
   ▼初心者M さん:おはようございます。

> 以下の様なデータになっており、「1」の製品版+特別版の組み合わせが11400&1090*3と、全く同じ数値が並んでおり、繰り上げが必要なのは1個だけです。

では、8行目の 数値の列(E,H,K...) は 何が入っているのですか?
その位置にも 適当な数字(すべて同じ数字)を入れて、再度、試しましたが、
ちゃんと赤く塗りつぶされます。
「繰り上げが必要なのは1個だけです。」というのは、サンプルデータで
「IJK列の9,10行の」データということですよね?

>
>   C  D  E  F  G  H  I  J  K
>
>〜
>
>9  1    11400  1     11400  1    8500
>
>10       1090        1090       910
>
>〜
>
>41  6     8700  6     7500  1    11400  
>
>42        870        660       1090
>
>〜
>
>73  6     8700  6     8700
>         870        700
>74
・ツリー全体表示

【75423】Re:以前作って頂いた物の改変(複雑です)
質問  初心者M  - 14/3/24(月) 9:23 -

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

 遅くなりまして申し訳ございません。
 以下の様なデータになっており、「1」の製品版+特別版の組み合わせが11400&1090*3と、全く同じ数値が並んでおり、繰り上げが必要なのは1個だけです。

 これを全てバラバラの数値にしたら、上手く色が付きました。
 よろしくお願いいたします。


   C  D  E  F  G  H  I  J  K



9  1    11400  1     11400  1    8500

10       1090        1090       910



41  6     8700  6     7500  1    11400  

42        870        660       1090



73  6     8700  6     8700
         870        700
74
・ツリー全体表示

【75422】Re:値の貼り付け方法
発言  マナ  - 14/3/23(日) 20:12 -

引用なし
パスワード
   追加してみてください。

一番最初に:

If WorksheetFunction.CountBlank(Range("GG1:GI2")) > 0 Then
  MsgBox "抽出条件を設定して下さい"
  Exit Sub
End If

終行を求めた直後に:

If 終行 = 6 Then
  MsgBox "何も抽出されませんでした"
  Exit Sub
End If
・ツリー全体表示

【75421】Re:値の貼り付け方法
お礼  りんご  - 14/3/23(日) 18:11 -

引用なし
パスワード
   ありがとうございました。早速利用させていただきたいと思います。お願いですが、フィルターデータがないときに、抽出マクロを実行したときのエラーを回避する方法を教えて頂けないでしょうか。
・ツリー全体表示

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