戻る  □一般操作のサロン  □ 使用方法  □ 新着記事  □ 新規に質問する!  □ トピック一覧  □ 検索  □ 過去ログ
[ 最新記事及び返信フォームをトピックトップへ ]
このトピック参照回数 :
データベース検索 数式も対応させたい

    [195793] データベース検索 数式も対応させたい-

    ■親トピック/記事引用/メール受信=OFF■

    □投稿者/ ハマナス -(2023/06/29(03:27))
    □U R L/
      こんばんは。
      
      データベース検索システムを作成したのですが、
      
      「DB」シートには列数 28 行数 100行の構成になっており
      数式が入っている列があるので「型が一致しません」というエラーになります。
      
      ご教授よろしくお願いいたします。
      
      
      Sub DBSearch()
          
          Call kousin
          Call midashioff
          
          Dim rowNo As Long, colNo As Long
          Dim sStr As String
          Dim dataDB As Variant
          Dim i As Long, j As Long
      
          
          'DBの取得
          With Worksheets("DB")
              
              rowNo = .Cells(.Rows.Count, "B").End(xlUp).Row                  '行の最終行取得
              colNo = .Cells(1, .Columns.Count).End(xlToLeft).Column          '列の最終列取得
              dataDB = .Range(.Cells(1, "A"), .Cells(rowNo, colNo)).Value     'DBの範囲取得
              
          End With
          
          With Worksheets("検索")
              
              sStr = .Range("A2").Value       '検索値のセルを取得
              
              '検索結果の削除
              rowNo = .Cells(.Rows.Count, "A").End(xlUp).Row
              If rowNo >= 4 Then
                  .Range(.Rows(4), .Rows(rowNo)).Delete
              End If
              
              '項目名
              With .Range(.Cells(4, "A"), .Cells(4, UBound(dataDB, 2)))
                  .Value = dataDB
                  .Interior.Color = RGB(0, 176, 80)
              End With
              
              '検索結果
              rowNo = 4
              For i = 2 To UBound(dataDB, 1)
                  Dim memo As String: memo = ""
                  For j = 1 To UBound(dataDB, 2)
                      memo = memo & dataDB(i, j)     ’←ここで止まります
                  Next j
                  If memo Like "*" & sStr & "*" Then
                      rowNo = rowNo + 1
                      For j = 1 To UBound(dataDB, 2)
                          .Cells(rowNo, j) = dataDB(i, j)
                      Next j
                  End If
              Next i
              
              '枠組み
              .Range(.Cells(4, "A"), .Cells(rowNo, UBound(dataDB, 2))) _
                  .Borders.LineStyle = xlContinuous
              
          End With
                     
          '見出し固定
          Call midashion
      
      End Sub
      
      
      Sub kousin()
      
          Worksheets(1).Range("A5").CurrentRegion.Offset(2, 0).Copy
          Worksheets("DB").Range("A2").PasteSpecial Paste:=xlPasteValues
          Application.CutCopyMode = False
          Worksheets("検索").Range("A2").Select
      
      End Sub
      
      
      Sub midashioff()
      
          Rows(5).Select
          ActiveWindow.FreezePanes = False
          
      End Sub
      
      
      Sub midashion()
      
          Rows(5).Select
          ActiveWindow.FreezePanes = True
          
      End Sub
      
      
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [195794] Re[1]: データベース検索 数式も対応させたい-

    記事引用/メール受信=OFF■

    □投稿者/ 半平太 -(2023/06/29(09:08))
    □U R L/
      > memo = memo & dataDB(i, j)     ’←ここで止まります
      で、その時 dataDB(i, j)の値はどうなっているんですか?
      
      エラーなんですか?
      エラーだったとして、止まらせないでどう進展させたいのですか?
      




    [195795] Re[2]: データベース検索 数式も対応させたい-

    記事引用/メール受信=OFF■

    □投稿者/ ヘンリー -(2023/06/29(09:19))
    □U R L/
      >数式が入っている列があるので「型が一致しません」というエラーになります。
      
      「dataDB = .Range(.Cells(1, "A"), .Cells(rowNo, colNo)).Value」
      となっているので、dataDBには、数式が入っていないはずですが…
      Valueプロパティについて調べてみて下さい。
      
      例えば、A1セルに「=SUM(A2:A5)」と入れて
      Range("B1").Value = Range("A1").Value
      をVBAで実行すると、B1セルには数式は入りません。
      
      「型が一致しません」という事は、
      
      「dataDB」というバリアント型の変数の型が、
      「dataDB(i, j)」という型になっていないのではないでしょうか。
      
      VBEのローカルウインドウを見てみて下さい。


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [195796] Re[3]: データベース検索 数式も対応させたい-

    記事引用/メール受信=OFF■

    □投稿者/ ヘンリー -(2023/06/29(11:56))
    □U R L/

      大変失礼しました。

      >「dataDB(i, j)」という型になっていないのではないでしょうか。

      と書きましたが、
      「dataDB(i, j)」の値が文字列型になっていないのではないでしょうか。
      が正しい文書でした。

      追記として、セルに数式を入れた場合、
      数式の入っているセルのValueプロパティで取得できるのは、
      数式の戻り値(返り値)です。
      ※数式を取得する場合、「Formula」プロパティです。

      この数式の戻り値が「文字型ではない」或いは「文字型にできない」
      のであれば、文字列演算子の「&」を使うと、
      「型が一致しません」というエラーが出る可能性があります。




    [195798] Re[4]: データベース検索 数式も対応させたい-

    記事引用/メール受信=OFF■

    □投稿者/ ハマナス -(2023/06/30(13:45))
    □U R L/

      半平太さん、ありがとうございます。
      > memo = memo & dataDB(i, j)     ’←ここで止まります

      黄色の反転になります。

      止まらせないで、数式結果を表示させたいです。


      ヘンリーさん、ありがとうございます。
      >この数式の戻り値が「文字型ではない」或いは「文字型にできない」
      >のであれば、文字列演算子の「&」を使うと、
      >「型が一致しません」というエラーが出る可能性があります。

      おっしゃる通り、数式の戻り値が認識できていない為
      止まってしまうのだと思います。




    [195800] Re[5]: データベース検索 数式も対応させたい-

    記事引用/メール受信=OFF■

    □投稿者/ ヘンリー -(2023/06/30(14:47))
    □U R L/

      >おっしゃる通り、数式の戻り値が認識できていない為
      認識できていないのは、ハマナス様ではないですか?

      例えば、指定したセル(セル範囲の中の1つのセル)に、
      「#DIV/0!」という値が表示されているところがある場合、
      (この場合、コンピュータは戻り値を「#DIV/0!」と認識している
      又Valueプロパティも「#DIV/0!」となる)
      「#DIV/0!」という値は文字ではなく、エラー値です。

      このエラー値を、無理やり文字型に変更しようとする(CStr)をすると、
      "エラー 2007"という文字列になります。
      ※「エラー 2007」をダブルクォーテーションにしてあるのは、
       文字列という明確な意図があるからです。

      文字型でない値(例えなエラー値)を文字列演算子「&」という
      文字列結合命令を出しても
      「型が一致しないので文字列結合できません」となります。

      最近のVBAやExcelの本では、「変数と変数の型」について
      掲載を省いているものが多いので、仕方がないことかもしれません。

      昔はコンピュータ関係の本には、「変数と変数の型」が1番初めに
      載っていたのですが。。。
      しかしながら、コンピュータを扱うにあたって、「型」というのは、
      切っても切り離せません。

      例えば、以下の2つの式は
      概念的にはどちらも正しいです。
      1+1=2
      1+1=11

      但し、正確に書くなら、
      1+1=2
      "1"+"1"="11"
      となります。

       1+1=2は数値演算
       "1"+"1"="11"は文字列演算(VBAでは「"1" & "1"」のように書きます)

      この様に、明確に「文字」と「数値」を分けて
      コンピュータに指示するのが基本です。
      理由は、コンピュータは全て「0」と「1」だけで動作するからです。
      例えば数値の「1」は「00000001」であらわされ、
      文字の"1"は「100000001」という様にあらわされる
      みたいな感じです。
      ※便宜上「0」と「1」に例えていて、
       ゼロとイチの組み合わせもでたらめですが、
       厳密な説明は長くなるので省きます。

      数式の戻り値(セルに表示されている値)は、
      どんなもの(全て文字型)ですか?
      エラー値とか入っていませんか?




    [195804] Re[6]: データベース検索 数式も対応させたい-

    記事引用/メール受信=OFF■

    □投稿者/ ハマナス -(2023/07/01(13:12))
    □U R L/

      ヘンリーさん、詳しく説明してくださり ありがとうございます。

      頭の中で??だったのが、ぼんやり明かりが射してきたような
      感じです。

      >数式の戻り値(セルに表示されている値)は、
      >どんなもの(全て文字型)ですか?
      >エラー値とか入っていませんか?

      #VALUE と表示されております。






    [195805] Re[7]: データベース検索 数式も対応させたい-

    記事引用/メール受信=OFF■

    □投稿者/ 半平太 -(2023/07/02(14:16))
    □U R L/
      こんな事かな?
      
      > memo = memo & dataDB(i, j)     ’←ここで止まります
        ↓
          If IsError(dataDB(i, j)) Then
              Select Case dataDB(i, j)
                  Case CVErr(xlErrDiv0)
                      memo = memo & "#DIV/0!"
                  Case CVErr(xlErrNA)
                       memo = memo & "#N/A"
                  Case CVErr(xlErrName)
                       memo = memo & "#NAME?"
                  Case CVErr(xlErrNull)
                       memo = memo & "#NULL!"
                  Case CVErr(xlErrNum)
                       memo = memo & "#NUM!"
                  Case CVErr(xlErrRef)
                      memo = memo & "#REF!"
                  Case CVErr(xlErrValue)
                      memo = memo & "#VALUE!"
                  Case Else
                     memo = memo & "This should never happen!!"
              End Select
          Else
              memo = memo & dataDB(i,j)
          End If


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [195806] Re[8]: データベース検索 数式も対応させたい-

    記事引用/メール受信=OFF■

    □投稿者/ ヘンリー -(2023/07/03(11:31))
    □U R L/

      追加の回答が遅れてすみません。

      >#VALUE と表示されております。
      という事は、コンピュータ(Excel)は、
      数式又は、ワークシート関数の戻り値を
      「#VALUE」と認識しているという事です。

      そして、ワークシート関数の戻り値がエラーの時、
      そしてエラーの種類によって文字列結合演算(&)で結合する文字列を
      強制的に指定したコードが、半平太様のコードになります。

      半平太様、フォローのコードありがとうございます。




    [195807] Re[9]: データベース検索 数式も対応させたい-

    記事引用/メール受信=OFF■

    □投稿者/ ハマナス -(2023/07/04(09:20))
    □U R L/

      返信が遅くなり申し訳ありませんでした。

      半平太さん、コードUPありがとうございました。
      このコードは、どこに追記?入替? すれば宜しいでしょうか。

      ヘンリーさん、説明ありがとうございました。




    [195808] Re[10]: データベース検索 数式も対応させたい-

    記事引用/メール受信=OFF■

    □投稿者/ 半平太 -(2023/07/04(10:28))
    □U R L/

      memo = memo & dataDB(i, j)     ’←ここで止まります
       ↑
      その1行と入替です。

      まぁ、現実問題として、そんな沢山のケースを想定しないでもいいんでしょうが、
      考え方が分かる様に、Microsoftのサンプルをそのまま利用しました。




    [195810] Re[11]: データベース検索 数式も対応させたい-

    解決!!ありがとうございました! / 記事引用/メール受信=OFF■

    □投稿者/ ハマナス -(2023/07/04(14:37))
    □U R L/

      半平太さん、ありがとうございました。

      全部表示されました。
      助かりました。



このトピック内容の全ページ数 / [0]

このトピックに書きこむ
Name/
E-Mail/

└>このツリーのレス記事をメールで受信しますか? YES/ NO/
Title/
URL/
Comment/ 通常モード->  図表モード-> (←の場合適当に改行を入れて下さい)
タグが使用できます。例 ⇒ <font color="blue">文字</font>
解決!!ありがとうございました! 解決       保留中です・・・ 保留        迷宮入りorほかあたって見ます・・ 迷宮入       すいませ〜ん。誰か〜! Help! ←※回答者専用
解決したらチェック       保留(コードテスト中など・・)         解決不可orレスが全く付かなくてほかのサイトに行くときなど・・
削除キー/
(半角8文字以内) 


- Child Forum -
Edit:ゆう-G