Excel VBA質問箱 IV

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

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


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

【63250】1.2.3.4.という文字列があればOK るか 09/10/19(月) 23:29 質問[未読]
【63251】Re:1.2.3.4.という文字列があればOK ichinose 09/10/20(火) 6:31 発言[未読]
【63261】Re:1.2.3.4.という文字列があればOK るか 09/10/20(火) 23:14 回答[未読]
【63262】Re:1.2.3.4.という文字列があればOK 独覚 09/10/20(火) 23:24 発言[未読]
【63265】Re:1.2.3.4.という文字列があればOK ichinose 09/10/21(水) 6:31 発言[未読]
【63271】Re:1.2.3.4.という文字列があればOK るか 09/10/21(水) 20:50 回答[未読]
【63276】Re:1.2.3.4.という文字列があればOK ichinose 09/10/22(木) 7:20 発言[未読]

【63250】1.2.3.4.という文字列があればOK
質問  るか  - 09/10/19(月) 23:29 -

引用なし
パスワード
   こんにちわ、よろしくおねがいします(´・ω・|||)

A、B、C、Dという文字列がセル一つ一つにバラバラと入っています。
例えば・・

A1 A
A2 
A3 C
A4 D
A5 B

↑これだとOKで

A1 
A2
A3 C
A4 D
A5 A

↑A〜Dのひとつでも抜けているとNG。A〜Dがすべてないと駄目なようにしたいんです。。
その列が赤く表示されるようにしたいです。


どうすればよいでしょうか。。よろしくおねがいします(_ _lll)

【63251】Re:1.2.3.4.という文字列があればOK
発言  ichinose  - 09/10/20(火) 6:31 -

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

VBAでチェックする方法もありますが、条件付書式の例です

A列全体を選択したください。

選択した状態で「書式」-----「条件付書式」とクリックします。
「条件付書式設定」ダイアログが表示されます。
「セルの値が」を「数式が」に変更し、右となりのボックスに

=COUNT(INDEX(MATCH(CHAR(64+ROW($A$1:$A$4)),$A:$A,0),,))<>4

と指定します。

書式ボタンをクリックし、パターンで赤を選択して下さい。

これでA列に A,B,C,Dが揃っていないとこの列が赤くなります。

Worksheet_Changeイベントでセルに入力のたびにA,B,C,Dの有無を確認する方法も
あります(仕事で使うんじゃこっちかなあ)

【63261】Re:1.2.3.4.という文字列があればOK
回答  るか  - 09/10/20(火) 23:14 -

引用なし
パスワード
   ▼ichinose さん:
>おはようございます。
>
>VBAでチェックする方法もありますが、条件付書式の例です
>
>A列全体を選択したください。
>
>選択した状態で「書式」-----「条件付書式」とクリックします。
>「条件付書式設定」ダイアログが表示されます。
>「セルの値が」を「数式が」に変更し、右となりのボックスに
>
> =COUNT(INDEX(MATCH(CHAR(64+ROW($A$1:$A$4)),$A:$A,0),,))<>4
>
>と指定します。
>
>書式ボタンをクリックし、パターンで赤を選択して下さい。
>
>これでA列に A,B,C,Dが揃っていないとこの列が赤くなります。
>
>Worksheet_Changeイベントでセルに入力のたびにA,B,C,Dの有無を確認する方法も
>あります(仕事で使うんじゃこっちかなあ)


ありがとうございます!!!
できました!!!!
すごいなぁ。。エクセル関数とかわからない。。

文で書いてみたんですが、”あ” しか検索できなくて。。
”あ”の後に、”あ”or”い”or”う”・・・
と記入すると型が違いますと出ます。

どうしたらいいでしょうか。。すみません(_ _lll)


  Dim myRng As Range

  
  Set myRng = Range("A1:A5")
  
  
  For i = 1 To 5
  
    If Range("A" & i).Value = "あ" Then
      
      MsgBox "あいるよ"
    Else
      MsgBox "あいないよ"
    End If

    
  Next

【63262】Re:1.2.3.4.という文字列があればOK
発言  独覚  - 09/10/20(火) 23:24 -

引用なし
パスワード
   この掲示板の基本方針をよくお読みください。

>別のサイト(掲示板)にまったく同じ目的の投稿をすることを、一般に「マルチポスト」といいます。
>当質問箱では、マルチポストは原則認めています。
>つまり、ほかのサイトで質問したことをこのサイトで質問してもかまわないということです。

>しかし、もしマルチポストをするのなら、可能な限り「○○にも同じ質問を出しました」ということを宣言してください。
>そして、仮に他のサイトで解決したのなら、ここにも必ずその顛末を書いてください。
>質問しっぱなし、というのはモラルに反します。
>「解決したからいいや」というのではありません。

>また、マルチポストを明示的に禁止しているサイトとのマルチポストをしてはいけません。

Q&Aサロンはマルチポストを明示的に禁じています。
http://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=128199&rev=0

【63265】Re:1.2.3.4.という文字列があればOK
発言  ichinose  - 09/10/21(水) 6:31 -

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

>文で書いてみたんですが、”あ” しか検索できなくて。。
>”あ”の後に、”あ”or”い”or”う”・・・
>と記入すると型が違いますと出ます。

まず、きちんとプロシジャー名も記述してください。
大勢の方が るかさんの投稿をみています。
例えば、るかさんよりVBAの知識がない方がそのままコピーしても
何だよ!!これだって動かないじゃん ってことになってしまいます。
御自分の抱えている問題を忠実に再現する投稿を心がけてください。
そうすることがきっと、 るかさんVBA上達に役に立ちますから・・・

Sub test()
  Dim i As Long
  Dim myRng As Range
  Set myRng = Range("A1:A5")
  For i = 1 To 5
    If Range("A" & i).Value = "あ" Or "い" Or "う" Or "え" Then
      MsgBox "あいるよ"
    Else
      MsgBox "あいないよ"
    End If
  Next
End Sub

このようなコードを実行すると、

If Range("A" & i).Value = "あ" Or "い" Or "う" Or "え" Then

の行で「型が一致しません」というエラーメッセージが出る ということですね?

Sub test1()
  Dim i As Long
  For i = 1 To 5
    If Range("A" & i).Value = "あ" Or _
      Range("A" & i).Value = "い" Or _
      Range("A" & i).Value = "う" Or _
      Range("A" & i).Value = "え" Then
      MsgBox Range("A" & i).Address & " には「あ」か「い」か「う」か「え」がいるよ"
    Else
      MsgBox Range("A" & i).Address & " には「あ」も「い」も「う」も「え」もいないよ"
    End If
  Next
End Sub

Orは、上記のように"あ"の比較と同じような 式を記述し、Orでつなげなければ
なりません。
私は、エラーの原因だけ言及しました。


>Q&Aサロンはマルチポストを明示的に禁じています。
>http://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=128199&rev=0

マルチポストに関しては、これは規則ですから仕方ありません。
守ってくださいね!!

リンク先に色々ともっと効率的なコードの投稿がありますから、
最終修正案は、リンク先のコードを参考にしてください。

そして、リンク先で るかさんが学んだ結果(成果)をこちらにも教えてください。

【63271】Re:1.2.3.4.という文字列があればOK
回答  るか  - 09/10/21(水) 20:50 -

引用なし
パスワード
   ▼ichinose さん:
>おはようございます。
>
>>文で書いてみたんですが、”あ” しか検索できなくて。。
>>”あ”の後に、”あ”or”い”or”う”・・・
>>と記入すると型が違いますと出ます。
>
>まず、きちんとプロシジャー名も記述してください。
>大勢の方が るかさんの投稿をみています。
>例えば、るかさんよりVBAの知識がない方がそのままコピーしても
>何だよ!!これだって動かないじゃん ってことになってしまいます。
>御自分の抱えている問題を忠実に再現する投稿を心がけてください。
>そうすることがきっと、 るかさんVBA上達に役に立ちますから・・・
>
>Sub test()
>  Dim i As Long
>  Dim myRng As Range
>  Set myRng = Range("A1:A5")
>  For i = 1 To 5
>    If Range("A" & i).Value = "あ" Or "い" Or "う" Or "え" Then
>      MsgBox "あいるよ"
>    Else
>      MsgBox "あいないよ"
>    End If
>  Next
>End Sub
>
>このようなコードを実行すると、
>
>If Range("A" & i).Value = "あ" Or "い" Or "う" Or "え" Then
>
>の行で「型が一致しません」というエラーメッセージが出る ということですね?
>
>Sub test1()
>  Dim i As Long
>  For i = 1 To 5
>    If Range("A" & i).Value = "あ" Or _
>      Range("A" & i).Value = "い" Or _
>      Range("A" & i).Value = "う" Or _
>      Range("A" & i).Value = "え" Then
>      MsgBox Range("A" & i).Address & " には「あ」か「い」か「う」か「え」がいるよ"
>    Else
>      MsgBox Range("A" & i).Address & " には「あ」も「い」も「う」も「え」もいないよ"
>    End If
>  Next
>End Sub
>
>Orは、上記のように"あ"の比較と同じような 式を記述し、Orでつなげなければ
>なりません。
>私は、エラーの原因だけ言及しました。
>
>
>>Q&Aサロンはマルチポストを明示的に禁じています。
>>http://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=128199&rev=0
>
>マルチポストに関しては、これは規則ですから仕方ありません。
>守ってくださいね!!
>
>リンク先に色々ともっと効率的なコードの投稿がありますから、
>最終修正案は、リンク先のコードを参考にしてください。
>
>そして、リンク先で るかさんが学んだ結果(成果)をこちらにも教えてください。


ichinoseさん!ありがとうございます☆
ichinoseさんが書いてくれたのはとっても分かりやすくて私レベルでは
なるほど!って感じでした。本当にありがとうございます!

マルチポスト・・知らなかったです(_ _lll)
早く解決したくって。。
ごめんなさい。

ichinoseさんが同じ型どうしにしたらいいって教えてくれて、やっとエラーなくできました!

が・・

この文じゃあ私がやりたいものにまったくならなくて。。

それでichinoseさんが一番最初に書いてくれたエクセル関数を解読しようと
頑張ったんですが。。エクセル関数はまったく知識ないんです(´・ω・|||)

=COUNT(INDEX(MATCH(CHAR(64+ROW($A$1:$A$4)),$A:$A,0),,))<>4

COUNT(範囲)
INDEX(配列,行番号,列番号)
MATCH(検査値,検査範囲,照合の型)

↑ここまでは一個一個調べてなんとなく。。分かったんですが、
CHAR(64+ROW($A$1:$A$4) ←???これがわからなくって。。
調べたんですがJIS番号?とかいうのに変換しているんでしょうか。。

私が検索したいと思ってのは文字列なんです。
あ とか い とかなんです。。

よかったらまた教えてください(´;д;`)

【63276】Re:1.2.3.4.という文字列があればOK
発言  ichinose  - 09/10/22(木) 7:20 -

引用なし
パスワード
   おはようございます。
条件付書式で行なうなら、以下のようにしてください。

まず、検索する文字列を名前の定義に登録します。
「挿入」----「名前」-----「定義」とクリックします。
名前の定義ダイアログが表示されます。
名前として 確認文字列 と指定してください。

参照範囲として、

={"あ","い","う","え"}

と指定して下さい。

これで OK をクリックして名前の定義完了です。


次に

赤く塗りつぶす範囲が セルA1〜A5でよいなら、

セルA1〜A5を選択して下さい。
この選択した状態で

「書式」-----「条件付書式」とクリックします。
「条件付書式設定」ダイアログが表示されます。
「セルの値が」を「数式が」に変更し、右となりのボックスに

=COUNT(INDEX(MATCH(確認文字列,$A$1:$A$5,0),,))<>COUNTA(確認文字列)

と指定します。

書式ボタンをクリックし、パターンで赤を選択して下さい。

これでA1〜A5に あ、い、う、えが揃っていないとこの範囲が赤くなります。


条件付書式設定後に

存在確認文字列を変更するなら、名前の定義で

={"あ","い","う","え"} を

={"あか","くろ","しろ","あお"}

なんていう変更だけでできます


マルチポスト先のコードも確認して
きちんと後始末も忘れないでください。

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