Excel VBA質問箱 IV

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

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


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

【61472】任意のセルに入力後、オートシェイプに反映させたい たけ 09/5/12(火) 13:11 質問[未読]
【61473】Re:任意のセルに入力後、オートシェイプに... neptune 09/5/12(火) 13:51 発言[未読]
【61474】Re:任意のセルに入力後、オートシェイプに... たけ 09/5/12(火) 14:03 発言[未読]
【61475】Re:任意のセルに入力後、オートシェイプに... neptune 09/5/12(火) 16:34 回答[未読]
【61477】Re:任意のセルに入力後、オートシェイプに... たけ 09/5/12(火) 21:27 発言[未読]
【61479】Re:任意のセルに入力後、オートシェイプに... neptune 09/5/12(火) 23:02 回答[未読]
【61488】Re:任意のセルに入力後、オートシェイプに... neptune 09/5/13(水) 12:18 発言[未読]
【61492】Re:任意のセルに入力後、オートシェイプに... たけ 09/5/13(水) 14:46 発言[未読]
【61502】Re:任意のセルに入力後、オートシェイプに... neptune 09/5/13(水) 22:00 回答[未読]
【61512】Re:任意のセルに入力後、オートシェイプに... たけ 09/5/14(木) 9:59 発言[未読]
【61522】Re:任意のセルに入力後、オートシェイプに... neptune 09/5/14(木) 13:07 発言[未読]
【61524】Re:任意のセルに入力後、オートシェイプに... たけ 09/5/14(木) 13:37 発言[未読]
【61528】Re:任意のセルに入力後、オートシェイプに... neptune 09/5/14(木) 16:35 発言[未読]
【61539】Re:任意のセルに入力後、オートシェイプに... たけ 09/5/15(金) 13:19 発言[未読]
【61543】Re:任意のセルに入力後、オートシェイプに... neptune 09/5/15(金) 16:52 発言[未読]
【61564】Re:任意のセルに入力後、オートシェイプに... たけ 09/5/18(月) 21:15 お礼[未読]

【61472】任意のセルに入力後、オートシェイプに反...
質問  たけ  - 09/5/12(火) 13:11 -

引用なし
パスワード
   セルの範囲を指定して,左側の列から1つずつ,セルに対しての条件分岐をして
その結果を別のシートのオートシェイプに反映したい(赤で塗りつぶす)と考えています.

動作としては,指定された範囲の任意のセルに数値が入力されると,その数値によって
オートシェイプの色が変わるということになるのですが,VBA初心者のため
functionまたはsubでの方法を含めて,教えていただけると幸いです.

自分なりに考えたコードを下に記述します.


Function pp(range1 As range) As String

Dim i As Interger

  For i=1 to 9
  Select Case range1.cells(i)
      
    Case 1
      Sheets("反映シート").Select
      ActiveSheet.Shapes("pp001").Select
      Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10
    
  End Select
  
  Next i     

End Function

range1については,1行指定で複数列となります.

このような感じで,反映シートのオートシェイプ(pp001〜009まで)の
塗りつぶしをしていきたいのですが・・・
分岐条件は1つしか書いていませんが,3つほど作る予定です.

マクロ記録をもとに作ってみましたが,間違いもあるかと思います.
それを含め,このコードをどの部分で活用すると思った処理に
なりますでしょうか?よろしくお願いします.

【61473】Re:任意のセルに入力後、オートシェイプ...
発言  neptune  - 09/5/12(火) 13:51 -

引用なし
パスワード
   ▼たけ さん:
こんにちは

すみません、何が判らないのでしょうか?
条件分岐なら
Let's Excel VBA「第三章 VBの基本文法(サンプル併用)」
ht tp://www.sanynet.ne.jp/~awa/excelvba/kouza.html
が参考になります。


ちなみに
if は複数のデータを評価する事が出来ます。
if a=1 then
・・・
else if b=2 then
・・・
end if
ってのも可能です。

対して、select caseは1つのデータを評価します。
これは既にご自分で書かれているので省略。

既定のプロパティは省略しない方が良いです。(後から見易い。可読性の問題)
>Select Case range1.cells(i)
Select Case range1.cells(i).value

【61474】Re:任意のセルに入力後、オートシェイプ...
発言  たけ  - 09/5/12(火) 14:03 -

引用なし
パスワード
   ▼neptune さん:
お世話になります.
すみません,本題がわかりづらくなってました.

1.任意のセルに入力後,別のシートのオートシェイプの塗りつぶしを実行する

2.どこに記述すると思ったように動くのか

をお聞きしたいと思っております.

1については,自分なりに書いた先のコードがありますが,たぶん修正が必要と思おもわれます

2については,Moduleへの記載なのか,それともワークシートへの記載なのか,
また,functionでよかったのか?

すみません,言葉足らずでしたら,ご指摘下さい.

あと,
>既定のプロパティは省略しない方が良いです。(後から見易い。可読性の問題)
>>Select Case range1.cells(i)
>Select Case range1.cells(i).value

つけた方がわかりやすいですね.ご指摘ありがとうございました.

【61475】Re:任意のセルに入力後、オートシェイプ...
回答  neptune  - 09/5/12(火) 16:34 -

引用なし
パスワード
   ▼たけ さん:
こんにちは

>1.任意のセルに入力後,別のシートのオートシェイプの塗りつぶしを実行する
どのようなタイミングでと言うのが抜けていますが、これは問題ないのですね?

>2.どこに記述すると思ったように動くのか
複数のシートから1つプロシージャを呼び出す場合はそのプロシージャの
スコープをpublicにして普通標準モジュールに書きます。
このプロシージャは引数を持つものになると思います。
そうでない場合はワークシートモジュールに書いてもOKです。

「任意のセルに入力」した、ワークシートモジュールから標準モジュール
においている、引数を持つプロシージャに引数を渡して処理するのが一般的
です。

VBにおいてプロシージャはsubとfunction(後プロパティとか)がありますが、
sub:戻り値を持たない。
function:戻り値を持つ
の特性からどちらを使うか判断します。

余計なお世話ですが、モジュールの拙い解説。
モジュールとは、
クラスモジュール、オブジェクトのモジュール(シート、userformなど)
があり、基本的にイベント等オブジェクトに関わるコードを書く所。
標準モジュールは特別なモジュールで、どのモジュールからも見る事が出来る
モジュールです。

#私は、自分からハイどうぞってソースは書きませんから、悪しからず。
#ソースをUPしてくれたら相談には乗ります。

【61477】Re:任意のセルに入力後、オートシェイプ...
発言  たけ  - 09/5/12(火) 21:27 -

引用なし
パスワード
   ▼neptune さん:
こんばんは

>>1.任意のセルに入力後,別のシートのオートシェイプの塗りつぶしを実行する
>どのようなタイミングでと言うのが抜けていますが、これは問題ないのですね?

Private Sub Worksheet_Change(ByVal Target As Range)

色々調べて,上記で対応するのがよいのかなぁと思います.

>>2.どこに記述すると思ったように動くのか
>複数のシートから1つプロシージャを呼び出す場合はそのプロシージャの
>スコープをpublicにして普通標準モジュールに書きます。
>このプロシージャは引数を持つものになると思います。
>そうでない場合はワークシートモジュールに書いてもOKです。

ワークシートモジュールでOKのようです.


>#私は、自分からハイどうぞってソースは書きませんから、悪しからず。
>#ソースをUPしてくれたら相談には乗ります。

初回の質問に自分の描くコードを記載しておりました.
(これがソースかどうかは分かりませんけど)

--------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False
  
  If Target.Address = Cells(4, 48).value Then
   
    Select Case Target.Cells
          
        Case 1
          Sheets("反映シート").Select
          ActiveSheet.Shapes("pp001").Select
          Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10
    End Select
  
  End If
  

Application.EnableEvents = True

End Sub

--------------------------------------------
一つだけつくってみましたが,cells(4,48)に1が入力された後,
オートシェイプの塗りつぶしには反映されていません(>_<)

【61479】Re:任意のセルに入力後、オートシェイプ...
回答  neptune  - 09/5/12(火) 23:02 -

引用なし
パスワード
   ▼たけ さん:
>初回の質問に自分の描くコードを記載しておりました.
>(これがソースかどうかは分かりませんけど)
どうも失礼しました。これだけだと動作に問題なはいと思いましたので。
よく見ると、問題あったようです。

>一つだけつくってみましたが,cells(4,48)に1が入力された後,
>オートシェイプの塗りつぶしには反映されていません(>_<)
これ最初に書いてましたかね。?これなら何がいけないか一発で判りました。
見逃したかな?

>--------------------------------------------
>Private Sub Worksheet_Change(ByVal Target As Range)
>
>Application.EnableEvents = False
>  If Target.Address = Cells(4, 48).value Then
  If Target.Address = Cells(4, 48).Address Then
>    Select Case Target.Cells
     '未確認ですが、cellsだと、もし、複数のセルを選択して、その中の1つのセルだけ変化させると
    'どうなるんだろ?エラーになるような気がします。キチンと指定した方が安全且つ、わかり易い
     Select Case Target.Cells.value
          
>        Case 1
>          Sheets("反映シート").Select
>          ActiveSheet.Shapes("pp001").Select
>          Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10
>    End Select
>  
>  End If
>Application.EnableEvents = True
>
>End Sub
多分これで動くと思いますが。。。。実験はしてません。

私ならこんな書き方をします。やってる事は同じです。

Private Sub Worksheet_Change(ByVal Target As Range)
const shName as string = "Sheet1"  'シート名
  Application.EnableEvents = False
  
  If Target.Address <> Worksheets(shName).Cells(4, 48).Address Then Exit Sub
  
  If Target.Value = 1 Then  '対象セルは1つとしている。
    Sheets("反映シート").Select  'この辺りselectしなければ駄目なのかな〜??
    ActiveSheet.Shapes("pp001").Select
    Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10
  End If
 
  Application.EnableEvents = True

End Sub

【61488】Re:任意のセルに入力後、オートシェイプ...
発言  neptune  - 09/5/13(水) 12:18 -

引用なし
パスワード
   ▼たけ さん:
こんにちは

昨日ササッと直前のソースのみ、見て回答を書いたんですが、
今日見てみるとなんか自信がなくなりました。多分、昨日書いたのでは駄目だろうと思います。

そこで、最初から読み直しても、やっぱり、よく条件がわかりません。

回答がおかしくなったお詫びに、サンプルソースを書こうと思います。

そこで教えてください。これで抜けはないですか?
何度もコードを書くのは面倒なので、よく以下の条件を見てみてください。

・セルの範囲を指定して,
・左側の列から1つずつ,セルに対しての条件分岐をして
※質問:セルの何に対してですか、位置、それともセルのデータ?
・その結果を別のシートのオートシェイプに反映したい(赤で塗りつぶす)
//////////////////////追加説明/////////////////
・指定された範囲の任意のセルに数値が入力されると,その数値によってオートシェイプの色が変わる
・range1については,1行指定で複数列

多分このような事だろうと想像している所。
1.Tagetが指定された範囲に含まれるかを確認
2.含まれていれば、その数値データを評価して、塗りつぶすシェイプと色を決定
3.他のシートのシェイプを2.の条件で塗りつぶす

誤りがあれば訂正して下さい。

【61492】Re:任意のセルに入力後、オートシェイプ...
発言  たけ  - 09/5/13(水) 14:46 -

引用なし
パスワード
   ▼neptune さん:
こんにちは
見直しの手間を取らせてしまい,申し訳ないです.

>多分このような事だろうと想像している所。
>1.Tagetが指定された範囲に含まれるかを確認
>2.含まれていれば、その数値データを評価して、塗りつぶすシェイプと色を決定
>3.他のシートのシェイプを2.の条件で塗りつぶす
>

まさにそのとおりです.

指定した範囲の中で,各々のセルに入力された数値に従い,
その数値に対して条件分岐をさせて(select case),任意のシェイプを塗りつぶすということになります.

case 1なら,1つのシェイプを塗りつぶす
case 2なら,別のシェイプを塗りつぶす
case 3なら,両方のシェイプを塗りつぶす.

こんな条件分岐です.


わたくしも,今日の朝試しながら,自分で試行錯誤をしましたが,
シェイプのセレクトまでは動きましたが,その先で止まっており,
最終的な塗りつぶしまでは行っていない状況でした.

よろしくお願いいたします.

【61502】Re:任意のセルに入力後、オートシェイプ...
回答  neptune  - 09/5/13(水) 22:00 -

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

worksheet_changeイベントが適正か否かを判断する情報がないので
呼び出したら良いようにしています。
正直まだ全体像が良く判らないので自信はないですが、叩き台くらいには
なるかと思います。

・・たけさんのBookが私の手元にあるわけではないし、どのようの目的で
どのように使うのかの情報がないので、どのタイミングで実行するかの
判断が出来ない。

'標準モジュール
Public Sub ChangeBKColor()

Const shName As String = "Sheet1"  'シート名
Dim i As Long, IMax As Long
Dim mRng As Range, rngBuf As Range
Dim ShapeName As String
Dim bkColor As Long
  
  Worksheets(shName).Activate
  Set mRng = Selection
  Application.EnableEvents = False
   
  ' 指定されたセルが想定した範囲である事を確認する
  'これは私にはできない(内容が不明なので情報不足。)
  '以下はあくまでも例です。
'  (mRngは連続しているものとする)
'
'  For Each rngBuf In mRng
'    If Not Intersect(rngBuf, 想定した範囲) Then Exit Sub
'  Next
  
  '判定
  IMax = mRng.Count
  For i = 1 To IMax
    Select Case mRng.Item(i).Value
      Case 1
        ShapeName = "pp001"
        bkColor = 1
      Case 2
        ShapeName = "pp002"
        bkColor = 2
      Case 3
        ShapeName = "pp003"
        bkColor = 3
      Case 4
        ShapeName = "pp004"
        bkColor = 4
      Case 5
        ShapeName = "pp005"
        bkColor = 5
      Case 6
        ShapeName = "pp006"
        bkColor = 6
      Case 7
        ShapeName = "pp007"
        bkColor = 7
      Case 8
        ShapeName = "pp008"
        bkColor = 8
      Case 9
        ShapeName = "pp009"
        bkColor = 9
      Case Else
        ShapeName = ""
        bkColor = -1
    End Select
    '色付け
    If ShapeName <> "" And bkColor <> -1 Then
      Sheets("反映シート").Select
      ActiveSheet.Shapes(ShapeName).Select
      Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10
    End If
  Next
  Application.EnableEvents = True
  Set mRng = Nothing
End Sub

【61512】Re:任意のセルに入力後、オートシェイプ...
発言  たけ  - 09/5/14(木) 9:59 -

引用なし
パスワード
   ▼neptune さん:
おはようございます。
サンプルコードありがとうございます!
upしていただいたコードを見ながら、試行錯誤しております。

あと、遅くなりましたが、説明不足の点、申し訳ないです。
以下、補足となります。

>・・たけさんのBookが私の手元にあるわけではないし、どのようの目的で
>どのように使うのかの情報がないので、どのタイミングで実行するかの
>判断が出来ない。

●シートは3つ
入力用シート(サンプルコードでのsheet1に相当)
集計用シート
反映シート(サンプルコードでの反映シートに相当)

●入力手順とコードを使う場所、タイミング

1.入力用のシートに回収したデータを横並びで入力していきます。

2.データには集計されるグループが決められており、グループ毎のデータが、集計用シートに集計されていきます。
(入力用に1-1,1-2,1-3,2-1,2-2,2-3のようになっており、1のグループ、2のグループ毎にまとめられた集計となります)

3.反映シートにはオートシェイプの図があり、あるグループの入力値に応じて、その図に色が塗られます。
(例えば、2のグループのデータにおいて、2-1の値が1だった場合、2だった場合、3だった場合として、1ならシェイプpp001が、2ならpp002が、3ならpp001とpp002の両方が塗りつぶされるような仕組みです)


上記のような動きとなります。
なお、1つのデータを横並びで入力しますので、データ数(データID)が増える=行が増えるため、今回のコードで参照される列の範囲は固定された状態となります。なお、参照される範囲は、Range("F4:I4")からはじまり、データ数が増えるごとにF5,I5、F6,I6と変化します。

また不足な点がありましたら、ご指摘ください。

【61522】Re:任意のセルに入力後、オートシェイプ...
発言  neptune  - 09/5/14(木) 13:07 -

引用なし
パスワード
   ▼たけ さん:
こんにちは

>●シートは3つ
>入力用シート(サンプルコードでのsheet1に相当)
>集計用シート
>反映シート(サンプルコードでの反映シートに相当)
>●入力手順とコードを使う場所、タイミング
>
>1.入力用のシートに回収したデータを横並びで入力していきます。
>
>2.データには集計されるグループが決められており、グループ毎のデータが、集計用シートに集計されていきます。
>(入力用に1-1,1-2,1-3,2-1,2-2,2-3のようになっており、1のグループ、2のグループ毎にまとめられた集計となります)
>
>3.反映シートにはオートシェイプの図があり、あるグループの入力値に応じて、その図に色が塗られます。
>(例えば、2のグループのデータにおいて、2-1の値が1だった場合、2だった場合、3だった場合として、
>1ならシェイプpp001が、2ならpp002が、3ならpp001とpp002の両方が塗りつぶされるような仕組みです)

この説明では、1つのデータグループを入力し終わった時点で、シェイプを操作
したいのか、それとも、全てのグループを入力し終わってかの判断は出来ませんね。
それで、やり方も変わってくるんじゃないですか?

>上記のような動きとなります。
>なお、1つのデータを横並びで入力しますので、データ数(データID)が増える=行が増えるため、
>今回のコードで参照される列の範囲は固定された状態となります。なお、参照される範囲は、
>Range("F4:I4")からはじまり、データ数が増えるごとにF5,I5、F6,I6と変化します。
これも、又情報不足ですね。その情報により、rangeオブジェクトのCurrentRegionメソッドとか、endプロパティ
を使用するとかその情報により変わってくるんじゃないですか?、

>また不足な点がありましたら、ご指摘ください。
あの〜私は質問に対しては出来るだけ協力しますが、質問者さんに、積極的に
仕様の説明を求めてまでは書きたくないのでその点、悪しからず。
最初にお断りしてますが、そのものズバリは書きません。

仕様、大まかな処理の手順は自分で考えるものです。
仕様、大まかな処理の手順を実現するための手法なら質問するのも良いでしょうが。
でないと後で自分か困る事になるからです。

想像するに、頭だけで考えて、いきなりプログラムを書こうとしているんじゃないかと思います。
今回のような小さなプログラムですと、慣れればそれで充分ですが、慣れないと、出来ません。
予め、処理の手順を整理する事をお勧めします。

飽くまで、具体的な(できればピンポイント)質問が好ましいです。

【61524】Re:任意のセルに入力後、オートシェイプ...
発言  たけ  - 09/5/14(木) 13:37 -

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


>>また不足な点がありましたら、ご指摘ください。
>あの〜私は質問に対しては出来るだけ協力しますが、質問者さんに、積極的に
>仕様の説明を求めてまでは書きたくないのでその点、悪しからず。
>最初にお断りしてますが、そのものズバリは書きません。


言葉不足で申し訳ないですと思ったまでです。

前の返信で
>>・・たけさんのBookが私の手元にあるわけではないし、どのようの目的で
>>どのように使うのかの情報がないので、どのタイミングで実行するかの
>>判断が出来ない。

と書かれていたので、自分なりに必要と思える情報を出したわけですが…
当然、ズバリという回答をもらうのであれば、有償作成にでもなるのでしょうけど。

【61528】Re:任意のセルに入力後、オートシェイプ...
発言  neptune  - 09/5/14(木) 16:35 -

引用なし
パスワード
   ▼たけ さん:
こんにちは

>と書かれていたので、自分なりに必要と思える情報を出したわけですが…
なんか、ものすごく意地悪してるみたいですみません。
でも、プログラムってそんなもんなんですよ。
コンピュータに命令してやるんですから、それこそ、手取り足取りじゃない
ですが、正確に命令してやらなければなりません。

後で事情が変わると、全部書き直しとか、継ぎはぎとかややこしくなるんですよ。
なので、何度も情報不足ですって書いたんです。
プログラムを書く人がわかってなければコンピュータに命令してやれませんから。
もし私が適当に書いてしまうと、たけさんが後で困るはずです。

>当然、ズバリという回答をもらうのであれば、有償作成にでもなるのでしょうけど。
はっきり言って、もう殆ど出来ていると思います。
肝心なShapeへの処理は、元々ご自分で書いているし、あれの改造で
出来るはずです。

後は、仕様をはっきり決めてやればよいのです。
案1
例えば、グループ毎に処理をするには
1.selectionchangeイベントで1つのグループでの入力処理が終わったか否か
 をチェックしてやる。
2.終わっていれば、処理を進める。
といった具合です。

1.に関して言えば、簡単に書きましたが、その仕組みを考えるのに
難しくはないですが、多少の経験と言いますか、スキルが必要です。

なので、私としては、
案2
1.何がしかのボタン、図形などにマクロを登録しておきそのボタンを
クリックすれば、処理を開始する。

をお勧めします。

追記:
もし、スバリが欲しければ、沢山それをする方も沢山居られるので
(・・でもここの掲示板はそういう方は比較的少ないかもしれません。)
別スレッドを立ててその旨書いて下さい。私は退散しますので。

ちなみに、今日もう一つ他のスレッドにResを書きましたが、
【61515】なんか、手順と関数名しか書いてません。

たけさんのスレッドには丁寧にResを付けたつもりでした。m(_ _)m
ただ、
>私は質問に対しては出来るだけ協力しますが、質問者さんに、積極的に
>仕様の説明を求めてまでは書きたくない
というのは曲げたくないのでご理解ください。

【61539】Re:任意のセルに入力後、オートシェイプ...
発言  たけ  - 09/5/15(金) 13:19 -

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

こんにちは
気分を害してしまったようでしたら申し訳ないです。
ただ、あまりにレスに対して距離ができ、突っぱねられているような感じがしたもので・・・

ですが、

>案1
>例えば、グループ毎に処理をするには
>1.selectionchangeイベントで1つのグループでの入力処理が終わったか否か
> をチェックしてやる。
>2.終わっていれば、処理を進める。
>といった具合です。
>
>1.に関して言えば、簡単に書きましたが、その仕組みを考えるのに
>難しくはないですが、多少の経験と言いますか、スキルが必要です。
>
>なので、私としては、
>案2
>1.何がしかのボタン、図形などにマクロを登録しておきそのボタンを
>クリックすれば、処理を開始する。
>
>をお勧めします。

こんなような感じでアドバイスをいただけたので、
それに沿った方法を、VBA本を見ながら試行錯誤できるのかなと思います。

頭の中で描いている内容はあっても、それを差し置いて
提示していただいたコードを理解しようとすることが先行してしまい、
結果的に混乱した状態だったのでしょう。申し訳ないです。


>>私は質問に対しては出来るだけ協力しますが、質問者さんに、積極的に
>>仕様の説明を求めてまでは書きたくない
>というのは曲げたくないのでご理解ください。

これはこれで納得です。自分が理解できていないコードを改変するのは
無理に等しいですから。

【61543】Re:任意のセルに入力後、オートシェイプ...
発言  neptune  - 09/5/15(金) 16:52 -

引用なし
パスワード
   ▼たけ さん:
こんにちは

ご理解頂けたようでホッとしています。

で、ご自分で作成されようとして居られるのが判りますので、
私も、これまでの情報を読み返し、現在の状況でつらつら考えてみました。
そもそも論になるかもしれませんが、

既に入力されたデータを変更する事はなく、データを追加して行くだけなら、
比較的簡単です。
データの評価、shape変更部分を別関数にしておくとして、

例えば、
Sub t()
  Range("F" & Rows.Count).End(xlUp).Select
End Sub
で最下行の取得が出来ます。
行が変われば、現在の最下行を取得し、その行を評価すればよいだけです。
offsetメソッドでずらせるだけでその値は取得できます。

但し、データの変更があるならそう単純な話ではなくなります。
どこかに、最初のデータを保管していなくてはならないからです。
その入力データは集計シートに存在するのでしょうか?

数千行のデータならメモリ上に保管しておけば済みますが、
万のデータになるとそういう事はやめた方が賢明かもしれませんので、
どこかに物理的に保管しておくほうが良いかもしれません。

なお、changeイベントは、編集状態にして同じデータを入力しても
発生しますから、changeイベントは使えません。

参考になりますでしょうか?

【61564】Re:任意のセルに入力後、オートシェイプ...
お礼  たけ  - 09/5/18(月) 21:15 -

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

先日アドバイスいただいたものを参考に

1.とりあえずシートにデータを入力
2.コマンドボタンクリックにて,イベントを発生させる
3.任意のセルに対し,それぞれselect caseにて条件分岐させ
対象のシェイプを塗りつぶす

こんな感じで作成できました.

ちなみに,任意のセルは2行しかないので,1個ずつの条件分岐をしてます.
また,データの入るセルについては,入力規制とisemptyにて入力ミスを
防ぐことでうまくいくようです.

まだまだ微修正がひつようですが,とりあえず形にはなりました.
遅くなりましたが,報告です.

色々とアドバイスありがとうございました^^

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