Excel VBA質問箱 IV

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

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


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

【16552】定義と異なる文字列を検索する方法 Ark 04/8/2(月) 15:53 質問[未読]
【16560】Re:定義と異なる文字列を検索する方法 IROC 04/8/2(月) 17:19 回答[未読]
【16599】Re:定義と異なる文字列を検索する方法 Ark 04/8/3(火) 17:08 発言[未読]
【16712】【再質問】定義と異なる文字列を検索する... Ark 04/8/6(金) 17:34 質問[未読]
【16723】Re:【再質問】定義と異なる文字列を検索す... Asaki 04/8/7(土) 0:53 回答[未読]
【16912】Re:【再質問】定義と異なる文字列を検索... Ark 04/8/16(月) 10:49 お礼[未読]

【16552】定義と異なる文字列を検索する方法
質問  Ark  - 04/8/2(月) 15:53 -

引用なし
パスワード
   0-123.pdf,application/pdf,PDF
1-aaa.ppt,application/vnd.ms-powerpoint,PowerPoint 2000

の様に「ファイル名、ファイルを開く定義づけ、ファイル形式」というような
データが表に収まっています。
(それぞれA列、B列、C列に収まっています。データ量は100〜200件ほど)

この表を検索して0-123.pdf,application/vnd.ms-powerpoint,PDFのように
定義したパラメータと違う値が入っているセルを
検知するにはどうしたらよいでしょうか。

IFかcase selectで作ろうと思ったのですが
定義する値が8個ほどあるのでelse ifだらけになって
ちょっと非効率かな、と思いました。

なるべく横一列を一まとまりにして検索をしたいのですが
「こんな関数を使ってみるのも良いかも」等ありましたらご教授願います。

【16560】Re:定義と異なる文字列を検索する方法
回答  IROC  - 04/8/2(月) 17:19 -

引用なし
パスワード
   もうすこし他のデータを例としてあげて頂けませんか?


>IFかcase selectで作ろうと思ったのですが
>定義する値が8個ほどあるのでelse ifだらけになって
>ちょっと非効率かな、と思いました。
実際に記述して、どのような感じになったのでしょうか?
コードを掲載して頂けると、修正案を提示し易いです。

【16599】Re:定義と異なる文字列を検索する方法
発言  Ark  - 04/8/3(火) 17:08 -

引用なし
パスワード
   >IROCさん

連絡が遅くなってしまってすみません。
アドバイスありがとうございます。
まだきちんとしたコード化ができていないので
もう少々お待ちいただいても良いでしょうか?
ぐちゃぐちゃなので少し整理してから再度お願いしたいと思います。
自分本位になってしまって申し訳ないです。。

頭の中では「こうこうこうしたい!」と思っているのですが
相変わらず機械に分かってもらえないです。
そのうち口頭で「こんな事したいなぁ」といったら
分かってくれる機械とかできてくれたらなぁ…と
他力本願なことを考えていました。

【16712】【再質問】定義と異なる文字列を検索する...
質問  Ark  - 04/8/6(金) 17:34 -

引用なし
パスワード
   VBEには怒られる(ポップアップで間違っていると教えてもらえる)つくりですが、
希望する形を作ってみました。
----------------------------
Const syori As String = "syori"           'syoriシートの定義づけ
Dim R1 As Integer, C1 As Integer, i As Integer   'R1,C1,iの定義づけ
  
Sub mime()


Sheets(syori).Select
Range("A2").Select
With Sheets(syori).Cells(1, 1).CurrentRegion
  R1 = .Rows.Count  'X軸の最終地点を探してくれる(行)
  C1 = .Columns.Count 'Y軸の最終地点を探してくれる(列)
End With

  a = (*.pdf,application/pdf,PDF)       '*.pdfをありますが、ファイル名は15文字でユニークネーム。
  b = (*.exe,Application/octet-stream, exe)
  c = (*.doc,Application/msword,Word)
  d = (*.ppt,application/vnd.ms-powerpoint,PowerPoint)
  e = (*.xls,application/vnd.ms-excel,Excel)
  f = (*.htm,text/html,HTML)
  g = (*.lzh,application/octet-stream,lzh)
  h = (*.txt,text/plain,Text)

      上 = 2                   '基点セルの行番号
      左 = 5                   '基点セルの列番号

With Sheets("filechk").Cells(2, 5).CurrentRegion  '(2,5)をカレントにする
         右 = 3                 '右端は5行目までしか使わないので固定。
         下 = Range(Cells(上, 左), Cells(上, 左)).End(xlDown).Row    '下端検出
End With

i = 2
Do whilehile i = C1
If Cells(i, 5, i, 7) = a Then    '(i,5)から(i,7)の値がaと同じ時  開始位置:(E2:G2)
  If Cells(i, 5, i, 7) = b Then  '(i,5)から(i,7)の値がbと同じ時
    If Cells(i, 5, i, 7) = c Then  '(i,5)から(i,7)の値がcと同じ時
'以下hまでを比較
'・
'・
'・

Else  'a〜hまでのすべての条件に一致しないものに対して

Cells(i, 5).Interior.ColorIndex = 6    '該当するセルに黄色で色を塗る

loop

MsgBox "一致していない型がありました。色付セルを見直しましょう"

End Sub
------------------------------------

このような形です。
今まで作った動くプログラムの昨日の一部切り張りと
自分の力である程度整形してみました。
aからhまでに定義した値がセルの(i,5)〜(i,7)に
入っていたらOK、どこかのセルに一つでも違う値が入っていたら
色付け&メッセージを出す…といった処理をしたいと思っています。
例えば(*.xls,Application/msword,Word)だったら
セル色付け&メッセージ、といった感じです。

ヘルプがインストールされていない環境の為、関数の勉強が不足している点が
多々あるとは思いますが、ご指導・ご教授を宜しくお願いします。

【16723】Re:【再質問】定義と異なる文字列を検索...
回答  Asaki  - 04/8/7(土) 0:53 -

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

パッと見でおかしそうなところだけ。
>Do whilehile i = C1

Do while i = C1
綴り間違いです。

>a = (*.pdf,application/pdf,PDF)
aからhは検索する文字列ですよね?
であれば、""で囲む必要があります。
a = "(*.pdf,application/pdf,PDF)"

>If Cells(i, 5, i, 7) = a Then
このような書き方は出来ません。
セルは1つずつ判定することになります。
例えば、
Dim j as Long
Dim flg as Boolean
For j = 5 to 7
  if cells(i,j).Value <> a then
    flg = True
    Exit For
  end if
Next j
If flg Then MsgBox a & " に一致しない文字列がありました。"

>With Sheets("filechk").Cells(2, 5).CurrentRegion  '(2,5)をカレントにする
>         右 = 3
>         下 = Range(Cells(上, 左), Cells(上, 左)).End(xlDown).Row
>End With
よく意味が判りません。
Withの意味がないようですが。。。

>MsgBox "一致していない型がありました。色付セルを見直しましょう"
エラーがなくてもメッセージが表示されることになります。
先の例のように、エラーがあったらフラグを立てることによって、
判定するなどの工夫が要ります。

一気にaからhまでやろうとせずに、
先ずは、1つの文字列に対しての判定を作ってみることをお薦めします。

【16912】Re:【再質問】定義と異なる文字列を検索...
お礼  Ark  - 04/8/16(月) 10:49 -

引用なし
パスワード
   >Asakiさん
ご指摘・指導ありがとうございます&返信が遅くなってしまって申し訳ないです。
一気にやろうとするからあちこち不具合が出てくるんですね。背伸びしすぎました。
ご指摘いただいたとおり、1個ずつチェックをしてみたいと思います。
まずはaから!

プログラムは背伸びしすぎるとよろしくない、というのを
身をもって体感いたしました。反省。

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