Excel VBA質問箱 IV

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

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


3647 / 13644 ツリー ←次へ | 前へ→

【60931】色づけ Q&A 09/3/25(水) 13:54 質問[未読]
【60932】Re:色づけ Jaka 09/3/25(水) 14:48 発言[未読]
【60934】Re:色づけ つん 09/3/25(水) 15:24 発言[未読]
【60936】Re:色づけ Abebobo 09/3/25(水) 20:34 発言[未読]
【60937】Re:色づけ Q&A 09/3/25(水) 23:20 質問[未読]
【60940】Re:色づけ Abebobo 09/3/25(水) 23:58 発言[未読]
【60938】Re:色づけ Abebobo 09/3/25(水) 23:43 発言[未読]
【60941】Re:色づけ Q&A 09/3/26(木) 0:34 お礼[未読]
【60943】Re:色づけ Abebobo 09/3/26(木) 2:26 発言[未読]
【60946】Re:色づけ つん 09/3/26(木) 11:26 発言[未読]
【60952】Re:色づけ Abebobo 09/3/26(木) 21:21 発言[未読]
【60955】Re:色づけ つん 09/3/26(木) 23:17 発言[未読]
【60958】Re:色づけ Abebobo 09/3/27(金) 11:39 発言[未読]
【60959】Re:色づけ つん 09/3/27(金) 12:59 発言[未読]

【60931】色づけ
質問  Q&A  - 09/3/25(水) 13:54 -

引用なし
パスワード
   REPT関数を用いて,
A列  B列  C列
あ  い
3   4   ◆◆◆●●●●

C2に =rept("◆",A2)&rept("●",B2)

としてC列以降にそれぞれの記号でグラフのようにしました。
これを記号ごとに色を変更したくて、
ネット上で検索したものをそのまま使用して申し訳ないのですが、

Sub 色づけ()

  Dim c As Range
  Dim i As Long
   For Each c In Selection
    If c Like "*◆*" Or c Like "*●*" Then
      For i = 1 To Len(c.Value)
        If Mid(c.Value, i, 1) = "◆" Then
          c.Characters(i, 1).Font.ColorIndex = 3
        ElseIf Mid(c.Value, i, 1) = "●" Then
          c.Characters(i, 1).Font.ColorIndex = 4
        End If
      Next i
    End If
  Next c
  
End Sub

例えばこれを採用した場合、現状で実行すると、
C列に入っているものが全て1色(試したときはColorIndex = 4(赤))
になってしまうのですが、
初歩的な質問ですがVBAって数式で導き出された値では
判別不可能なのでしょうか?
また、改善点あればご教授いただきたいのですが・・・
よろしくお願いします。

【60932】Re:色づけ
発言  Jaka  - 09/3/25(水) 14:48 -

引用なし
パスワード
   >初歩的な質問ですがVBAって数式で導き出された値では
>判別不可能なのでしょうか?
不可能の意味が良く解りませんが、なさりたい事は不可能だと思います。
文字の実体がないし、そのように表示しているだけだから....。

表示形式に手を加える方法なら、多少はできると思いますが、
その表示形式の表現方法は、解りません。

【60934】Re:色づけ
発言  つん  - 09/3/25(水) 15:24 -

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

Jaka さん、どもども

>表示形式に手を加える方法なら、多少はできると思いますが、
>その表示形式の表現方法は、解りません。
条件付き書式なんてのでもムリですよねえ・・・・
(あまり詳しくないけど)

作業列を作って、作業列に数式を入力
その横の列に、「値の貼り付け」して、
それに対して、色づけ処理されたらどないでしょ?

【60936】Re:色づけ
発言  Abebobo  - 09/3/25(水) 20:34 -

引用なし
パスワード
   あの〜
VBAを使えるのなら、B列のチェンジイベントでC列に●▲を吐き出させるのが簡単だと思うのですが・・・。

【60937】Re:色づけ
質問  Q&A  - 09/3/25(水) 23:20 -

引用なし
パスワード
   みなさん回答ありがとうございます。
現在、値で貼り付けてそれを色付けする方法をやってみてます。

はじめ質問したときのVBA文で、
For Each c In Selection
    If c Like "*◆*" Or c Like "*●*" Then
のところがどのような処理をしているのか
よくわからないのですが、ご教授いただくことできませんか?
本当に質問ばかりですみません。


▼Abebobo さん:

質問です。
>VBAを使えるのなら、B列のチェンジイベントでC列に●▲を吐き出させるのが簡単だと思うのですが・・・。

・・・すみません、「チェンジイベント」って何ですか?

【60938】Re:色づけ
発言  Abebobo  - 09/3/25(水) 23:43 -

引用なし
パスワード
   妻・子供は就寝中で、梅酒片手に至福の時間をすごしながら作ってみました。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Long
Dim i As Long
 If Target.Column >= 3 Then Exit Sub
 Application.EnableEvents = False
 
 With Range("C" & Target.Row)
  If Not IsNumeric(.Offset(, -2).Value) Then
    .Replace What:="◆", Replacement:=""
   Exit Sub
  End If
  If Not IsNumeric(.Offset(, -1).Value) Then
    .Replace What:="●", Replacement:=""
    Exit Sub
  End If
  .Value = ""
  For i = 1 To .Offset(, -2).Value
    .Value = "◆" & .Value
  Next
  For i = 1 To .Offset(, -1).Value
    .Value = .Value & "●"
  Next
  For i = 1 To Len(.Value)
    If Mid(.Value, i, 1) = "◆" Then
      .Characters(i, 1).Font.ColorIndex = 3
    ElseIf Mid(.Value, i, 1) = "●" Then
      .Characters(i, 1).Font.ColorIndex = 4
    End If
  Next i
  Application.EnableEvents = True
 End With
 
End Sub

他にもエラー処置が必要かも??
*こんなコードにつっ込みも下さい

【60940】Re:色づけ
発言  Abebobo  - 09/3/25(水) 23:58 -

引用なし
パスワード
   Q&A さん
いきちがえです

>・・・すみません、「チェンジイベント」って何ですか?
VBEの画面の左に
 −□VBAProject(クック名)
  −□Microsoft Exel Objects
    □Sheet1(シート名)
    □Sheet2(シート名)
こんな小窓がありますか?
そこの計算させたいシート名をクリックして
でてきたVBEの大窓の方に 先ほどのコードをはっつけて
A列 B列 の数字を代えてみてください。

VBAに興味を持つことが出来たら勉強してみて下さい
://officetanaka.net/
↑先頭にHTTP と半角でつなげてください
参考になるんじゃないかな

【60941】Re:色づけ
お礼  Q&A  - 09/3/26(木) 0:34 -

引用なし
パスワード
   ▼Abebobo さん:
ありがとうございます。
チェンジイベントについてありがとうございました。

あと頂いたコードですが、
む、難しいです・・・
まだまだ初心者で勉強不足のため、調べながら解読してみます。
大まかな解説をいただけると後学のために
非常にありがたいのですが、
甘いですね、すみません。

ありがとうございました!

【60943】Re:色づけ
発言  Abebobo  - 09/3/26(木) 2:26 -

引用なし
パスワード
   Q&A さん
>あと頂いたコードですが、
>む、難しいです・・・
というこは、うまくいかなかったのでしょうか?

>大まかな解説をいただけると後学のために
もう大分酔っ払っているので・・。
最近仕事中もすごく忙しいので・・・。
明日の夜になるとおもいます。

もし、うまくいっていなかったらどの様にうまくいかなかったかも書いておいてください。

【60946】Re:色づけ
発言  つん  - 09/3/26(木) 11:26 -

引用なし
パスワード
   おはようございます〜^^

>Private Sub Worksheet_Change(ByVal Target As Range)
>Dim r As Long
>Dim i As Long
> If Target.Column >= 3 Then Exit Sub
> Application.EnableEvents = False
> 
> With Range("C" & Target.Row)
>  If Not IsNumeric(.Offset(, -2).Value) Then
>    .Replace What:="◆", Replacement:=""
>   Exit Sub
>  End If
>  If Not IsNumeric(.Offset(, -1).Value) Then
>    .Replace What:="●", Replacement:=""
>    Exit Sub
>  End If
>  .Value = ""
>  For i = 1 To .Offset(, -2).Value
>    .Value = "◆" & .Value
>  Next
>  For i = 1 To .Offset(, -1).Value
>    .Value = .Value & "●"
>  Next
>  For i = 1 To Len(.Value)
>    If Mid(.Value, i, 1) = "◆" Then
>      .Characters(i, 1).Font.ColorIndex = 3
>    ElseIf Mid(.Value, i, 1) = "●" Then
>      .Characters(i, 1).Font.ColorIndex = 4
>    End If
>  Next i
>  Application.EnableEvents = True
> End With
> 
>End Sub
>
>他にもエラー処置が必要かも??
>*こんなコードにつっ込みも下さい

えーと、僭越ながら、突っ込ませていただきます!

Application.EnableEvents = False
Application.EnableEvents = True

でサンドイッチになってますが、
途中、「Exit Sub」で抜けてしまうと、
Application.EnableEvents = True が通らなくなって、
以後イベントが発生しなくなっちゃいます(>_<)


※どうせ、VBA使うなら、作業列を作って、数式を作ったりせず、最初から全部VBAですればいいんやん!!・・・って、Abebobo さんの回答みて、初めて気がつきました。ぼけぼけ〜〜〜〜

【60952】Re:色づけ
発言  Abebobo  - 09/3/26(木) 21:21 -

引用なし
パスワード
   つん さん:
>えーと、僭越ながら、突っ込ませていただきます!
ありがとうございます。
とんだ失敗でした。

まずは、
'標準モジュールに
Sub gomennne()
  Application.EnableEvents = True
End Sub

を一回走らせたほうがいいかな

そして、これに書き換えてください。
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Long
Dim i As Long
 If Target.Column >= 3 Then Exit Sub
 Application.EnableEvents = False

 With Me.Range("C" & Target.Row)    '入力したセルの行のC列で
  If Not IsNumeric(.Offset(, -2).Value) Then 'A列の値が数字じゃなければ
    .Replace What:="◆", Replacement:=""  '◆を無しに置換します。
    GoTo owari               '飛べ!
  End If
  If Not IsNumeric(.Offset(, -1).Value) Then
    .Replace What:="●", Replacement:=""
    GoTo owari
  End If
  .Value = ""             'いったん消します。
  For i = 1 To .Offset(, -2).Value  'A列の数字分繰り返します
    .Value = "◆" & .Value
  Next
  For i = 1 To .Offset(, -1).Value
    .Value = .Value & "●"
  Next
  For i = 1 To Len(.Value)      'C列の文字数繰り返します。
    If Mid(.Value, i, 1) = "◆" Then
      .Characters(i, 1).Font.ColorIndex = 3
    ElseIf Mid(.Value, i, 1) = "●" Then
      .Characters(i, 1).Font.ColorIndex = 4
    End If
  Next i

 End With
owari :
Application.EnableEvents = True
End Sub

*くやしい〜  go to しか思いつかなかったぁ〜
もしかして、つんさんがもっと良いコードを見せてくれるかも・・・(へへ)
修正しました 本当にすみませんでした。

【60955】Re:色づけ
発言  つん  - 09/3/26(木) 23:17 -

引用なし
パスワード
   こんばんは

>*くやしい〜  go to しか思いつかなかったぁ〜
>もしかして、つんさんがもっと良いコードを見せてくれるかも・・・(へへ)

あれ?最初見たときは「りんさん」に期待されてたような^^;
最近りんさんは見に来てはらへんのかなあ・・・・
りんさんの回答なら心強いのですが・・・

とりあえず、昼間ぐちゃぐちゃといじくってたコードです

Private Sub Worksheet_Change(ByVal Target As Range)

  Dim s As String
  Dim i As Long
  Dim k As Long
  
  If Target.Column >= 3 Then Exit Sub
  
  
  If IsNumeric(Cells(Target.Row, 1).Value) = True Then
    For i = 1 To Cells(Target.Row, 1).Value
      s = s & "◆"
    Next i
    k = Cells(Target.Row, 1).Value
  Else
    k = 0
  End If
  
  If IsNumeric(Cells(Target.Row, 2).Value) = True Then
    For i = 1 To Cells(Target.Row, 2).Value
      s = s & "●"
    Next i
  End If
  
  Application.EnableEvents = False
  With Cells(Target.Row, 3)
    .Value = ""
    .Value = s
    If .Value <> "" Then
      .Characters(1, k).Font.ColorIndex = 3
      .Characters(k + 1, Len(.Value)).Font.ColorIndex = 4
    End If
  End With
  Application.EnableEvents = True
  
End Sub

半分以上、友人が作ったのをアレンジしたんですが^^;;;
「数値」以外が入力された時は対応出来てるけど、
少数や負の数字の時はちゃんと出来てませんね。

あらかじめ、入力規則で、正の整数しか入力できないようにしとくのがいいのかなあ?

好き勝手にやってますが(すみませんっ)、Q&Aさん大丈夫かな?

【60958】Re:色づけ
発言  Abebobo  - 09/3/27(金) 11:39 -

引用なし
パスワード
   つん さん
やっぱりばれてました。すみませんでした。

【60959】Re:色づけ
発言  つん  - 09/3/27(金) 12:59 -

引用なし
パスワード
   ▼Abebobo さん
こんにちは^^

>やっぱりばれてました。すみませんでした。
いえいえ。
私も、何年もブランクがあり、すっかり初心者レベルですから^^;
(そんな奴に回答されるのも、質問者の方にしたら大迷惑ですねorz)
また、レベル上げて、お役に立てるようになりたいです。

書き込みに、りんさんの名前をあえて出したのは、
もしかしたら、彼女が釣られて出てきてくれるかも?なんて思惑があったりなかったり〜

また、私のコードにも突っ込んでやってください^^

で・・・Q&Aさんは解決されてるんかな〜?

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