2017-11-18 10 views
-2

Excelワークブックの1つのグループに4つの図形があります。黄色で2つの図形を表示すると、セル(6,21)が1になり、セル(6,22)が表示されます。 (9,21)はまだ2のままです。異なる色の図形グループの数を計算する

以下は私のワークブックに適用されますが動作しなかったVBAコードです私が望むように。

Private Sub Worksheet_Activate() 
Dim shp As Shape 
Dim shprange As ShapeRange 
Dim CountyellowShape As Long 
Dim CountorangeShape As Long 
Dim CountpinkShape As Long 
Dim CountblueShape As Long 

For Each shp In Sheet1.Shapes 

    If shp.Type = msoGroup Then 
     Set shprange = shp.Ungroup 
     Set oMyGroup = shprange.Group 

     If shprange.Fill.ForeColor.RGB = RGB(255, 255, 0) Then CountChildShapeYELLOW = CountChildShapeYELLOW + 0.5 
     If shprange.Fill.ForeColor.RGB = RGB(255, 153, 0) Then CountChildShapeORANGE = CountChildShapeORANGE + 0.5 
     If shprange.Fill.ForeColor.RGB = RGB(255, 102, 153) Then CountChildShapePINK = CountChildShapePINK + 0.5 
     If shprange.Fill.ForeColor.RGB = RGB(0, 176, 240) Then CountChildShapeBLUE = CountChildShapeBLUE + 0.5 

    End If 
Next shp 

For Each shp In Sheet1.Shapes 
    If shp.Fill.ForeColor.RGB = RGB(255, 255, 0) Then CountShapeYELLOW = CountShapeYELLOW + 0.5 
    If shp.Fill.ForeColor.RGB = RGB(255, 153, 0) Then CountShapeORANGE = CountShapeORANGE + 0.5 
    If shp.Fill.ForeColor.RGB = RGB(255, 102, 153) Then CountShapePINK = CountShapePINK + 0.5 
    If shp.Fill.ForeColor.RGB = RGB(0, 176, 240) Then CountShapeBLUE = CountShapeBLUE + 0.5 
Next shp 

Sheet1.Cells(6, 21) = CountShapeYELLOW + CountChildShapeYELLOW 
Sheet1.Cells(7, 21) = CountShapeORANGE + CountChildShapeORANGE 
Sheet1.Cells(8, 21) = CountShapePINK + CountChildShapePINK 
Sheet1.Cells(9, 21) = CountShapeBLUE + CountChildShapeBLUE 


    For Each shp In Sheet1.Shapes 
    If shp.Type = msoGroup Then 
     Set shprange = shp.Ungroup 
     For Each grpShp In shprange 

      If grpShp.Fill.ForeColor.RGB = RGB(255, 255, 0) Then CountChildShapeYELLOW = CountChildShapeYELLOW + 0.5 
      If grpShp.Fill.ForeColor.RGB = RGB(255, 153, 0) Then CountChildShapeORANGE = CountChildShapeORANGE + 0.5 
      If grpShp.Fill.ForeColor.RGB = RGB(255, 102, 153) Then CountChildShapePINK = CountChildShapePINK + 0.5 
      If grpShp.Fill.ForeColor.RGB = RGB(0, 176, 240) Then CountChildShapeBLUE = CountChildShapeBLUE + 0.5 
     Next grpShp 
     shprange.Group 
    Else 
     If shp.Fill.ForeColor.RGB = RGB(255, 255, 0) Then CountShapeYELLOW = CountShapeYELLOW + 0.5 
     If shp.Fill.ForeColor.RGB = RGB(255, 153, 0) Then CountShapeORANGE = CountShapeORANGE + 0.5 
     If shp.Fill.ForeColor.RGB = RGB(255, 102, 153) Then CountShapePINK = CountShapePINK + 0.5 
     If shp.Fill.ForeColor.RGB = RGB(0, 176, 240) Then CountShapeBLUE = CountShapeBLUE + 0.5 
    End If 
Next shp 

Sheet1.Cells(6, 22) = CountShapeYELLOW + CountChildShapeYELLOW 
Sheet1.Cells(7, 22) = CountShapeORANGE + CountChildShapeORANGE 
Sheet1.Cells(8, 22) = CountShapePINK + CountChildShapePINK 
Sheet1.Cells(9, 22) = CountShapeBLUE + CountChildShapeBLUE 

End Sub 

ありがとうございます。 Wiz Lee

+0

非常に悪い説明。私はあなたが何を望んでいるか分かりません。 「私が望むように動かなかった」と言っても、コードを実行したときに何が起こるかについては何も説明されていないので、問題の解決策を作るのには役立ちません。 ...実際には、いくつかのコードを掲示して「うまくいきません」と言いました....私が言うことは「よく、あなたのコードを変更して、あなたが望むことをする」ということです。 – jsotola

+0

本当に残念です私の英語はとても悪く、あなたを無力にします。私はコードを実行するとき、私はグループシフトに異なる色を入れて、セル(6,21)は0に変更されます。私はセル(6,21)が1として残る必要があります。 –

答えて

0

以下のコードは、ワークシートの各図形の塗りつぶし色を調べ、指定した4色の図形の数を数えます。結果は配列ColorCount(1〜4)に格納されます。他の色のシェイプは無視されます。

Private Sub Worksheet_Activate() 
    ' 18 Nov 2017 

    Dim Shp As Shape 
    Dim ColorCount(1 To 4) As Long 
    Dim n As Long 

    With Sheet1 
     For Each Shp In .Shapes 
      On Error Resume Next 
      n = Application.Match(Shp.Fill.ForeColor, _ 
       Array(39423, vbYellow, 10053375, 15773696), 0) 
       ' 1 = orange, 2 = yellow, 3 = pink, 4 = blue 
      If Err.Number = 0 Then 
       ColorCount(n) = ColorCount(n) + 1 
      End If 
     Next Shp 

     For n = 1 To 4 
      Debug.Print n, Split("Orange yellow pink blue")(n - 1) & ": " & ColorCount(n) 
     Next n 
'  .Cells(6, 22) = CountShapeYELLOW + CountChildShapeYELLOW 
'  .Cells(7, 22) = CountShapeORANGE + CountChildShapeORANGE 
'  .Cells(8, 22) = CountShapePINK + CountChildShapePINK 
'  .Cells(9, 22) = CountShapeBLUE + CountChildShapeBLUE 
    End With 
End Sub 

上記のコードは、テスト目的でのみイミディエイトウィンドウ(Debug.Print)にカウントを出力します。結果をシートに書き込むための値に変換するアルゴリズムは、あなたの質問で十分に説明できません。明らかに、この変換は、カウントが完了した後、その結果がシートに書き込まれる前に行わなければなりません。たぶん、手に数えて、あなたはそれを行うことができるでしょう。そうでなければ、あなたは

+0

私の説明については申し訳ありませんが非常に悪かった。私が説明しようとしているのは、私のコードはセル(6,21)に数字(1)を表示する作業ですが、同じ色をグループの形にしたときだけです。私はセル(6,21)の静止画がグループの色に関係なく数字(1)のまま残っておきたい。 –

+0

F21とF22の両方が黄色に関連しているようです。 0,1,2,3または4の黄色の形があります。あなたが満たすべき2つのセルがあるので、セルの空白を残す可能性を数えずに、カウントから8つの可能な組み合わせがあります。あなたのルールは、「1つ以上の黄色の形がある場合は、F21に1を書いてください。ご確認ください。 F22のルールは何ですか?細胞G21:I22は他の色と同様に扱われますか? – Variatus

+0

F21はグループ上でカウントされ、3つのグループの色が黄色で表示され、F21が3と書かれ、F22がカウントされます。グループあたり5つのシェイプがあれば、F22は5と書いてください。ピンク、I21は青色です。 –

0

enter link description here

は、あなたがこのリンクを開くことができます。..シートに書かれた何をしたいの意味を説明してください? 私は評判要件のために画像をアップロードする資格はありません。

関連する問題