Excel VBA質問箱 IV

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

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


120 / 3841 ページ ←次へ | 前へ→

【80082】教えてくささい。
質問    - 18/8/5(日) 18:18 -

引用なし
パスワード
   どなたか教えてください。
以下のプログラムを試してみたのですが、上手くいきません。
メッセージボックスに空白またはキャンセルした場合に、
シート全体に意図しない部分に色が着いてしまいます。
そこで、(1)の部分を
   If 検索結果 <> False And 検索結果 <> "" Then '
に変更してみたのですが、上手くいきません。
なぜ、思い通りに動かないのか わかりません。
どなたか、教えていただけないでしょうか?


Dim 検索値 As Variant
Dim 検索結果 As Range
Dim 最初結果 As Range
Dim 結果範囲 As Range
Dim データ範囲 As Range
Set データ範囲 = ActiveSheet.UsedRange
検索値 = InputBox("検索する文字列を入力してください")
Set 検索結果 = データ範囲.Find _
(What:=検索値, LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByColumns, MatchCase:=True, MatchByte:=True)
If 検索結果 Is Nothing Then  ←(1)
MsgBox 検索値 & "はみつかりません。"
Exit Sub
Else
Set 最初結果 = 検索結果
Set 結果範囲 = 検索結果
End If
Do
Set 検索結果 = データ範囲.FindNext(検索結果)
If 検索結果.Address = 最初結果.Address Then
Exit Do
Else
Set 結果範囲 = Union(結果範囲, 検索結果)
End If
Loop
MsgBox 検索値 & "は" & 結果範囲.Count & "件みつかりました。" & vbCrLf & _
セルを黄色で塗りつぶします。
結果範囲.Interior.Color = RGB(255, 255, 0)

End Sub
・ツリー全体表示

【80081】Re:ADODB.Recordsetを使用してデータベー...
お礼  ごう  - 18/8/2(木) 9:45 -

引用なし
パスワード
   ▼亀マスター さん:
>フィールド名のUpdateメソッドの引数に指定したD、E、F、Gのどれかが名前を間違っていたりしないでしょうか。

お返事ありがとうございます。
引数に指定したD、FはDatetime型だったのですが、変数に空文字を指定していました。
D、Fはテーブル作成時、NULLを受け付けるようにしているので、
変数空文字となる場合(Excelのセルが空白の場合)は、Nullを代入することで対応しました。
・ツリー全体表示

【80080】Re:ADODB.Recordsetを使用してデータベー...
発言  亀マスター  - 18/8/1(水) 22:06 -

引用なし
パスワード
   フィールド名のUpdateメソッドの引数に指定したD、E、F、Gのどれかが名前を間違っていたりしないでしょうか。
・ツリー全体表示

【80079】ADODB.Recordsetを使用してデータベース...
質問  ごう  - 18/8/1(水) 13:56 -

引用なし
パスワード
   ADODB.Recordsetを使用してデータベースの更新をするマクロを作成しています。

更新する項目が多いので、Update分を分けて書こうとしました。
以下のようなコードを書きましたが、2回目のUpdate文で
「実行時エラー '3265': 要求された名前、または序数に対応する項目がコレクションで見つかりません。」というエラーメッセージが出ます。

なぜこのようなメッセージが出るのか、そしてどこを見直せばよいか、教えていただけないでしょうか?


With rs2
  ' テーブルを開く
  .Source = "TABLE"
  .ActiveConnection = cn
  .CursorType = adOpenKeyset   ' キーセットカーソル使用
  .LockType = adLockPessimistic  ' レコード単位排他的ロック
  .Open
  
  .Find "SerialNo = '" + strSerialNo + "'", 0, adSearchForward
  
  ' レコードを更新する
  .Update Array("A", "B", "C"), Array(Data11, Data12, Data13)
  .Update Array("D", "E", "F", "G"), Array(Data14, CStr(Color14), Data15, CStr(Color15))
End With

rs2.Close
・ツリー全体表示

【80078】Re:項目毎にシート分割する方法
発言  マナ  - 18/7/25(水) 21:08 -

引用なし
パスワード
   知恵袋で回答をいただいたようです
・ツリー全体表示

【80077】Re:FormulaプロパティでVlookup関数とMa...
お礼  初心者ママ  - 18/7/23(月) 19:52 -

引用なし
パスワード
   ▼γ さん:
お礼が遅くなり申し訳ありません。
アドバイス頂いた内容で修正、処理したところ希望通りの結果が出るようになりました!!
助かりました…
拙い質問文にも関わらず丁寧にご教示頂きありがとうございましたm(__)m

引き続き精進したいと思います。
・ツリー全体表示

【80076】Re:iframe内の情報を取得
お礼  こうせつ  - 18/7/22(日) 22:39 -

引用なし
パスワード
   γ さん
ありがとうございます。

きっと参考になる(答えレベルなのかも)のでしょうが、
それを読み解く力が私にはありませんでした。
・ツリー全体表示

【80075】Re:iframe内の情報を取得
発言  γ  - 18/7/21(土) 19:39 -

引用なし
パスワード
   そこにある記事が今は消えていますが、
下記のarchiveに残っていました。参考になるかは私には不明。

web.archive.org/web/20150425032036/HTTP://www.moug.net/faq/viewtopic.php?t=71836
途中の4文字を半角小文字に修正してください。
・ツリー全体表示

【80074】Re:iframe内の情報を取得
お礼  こうせつ  - 18/7/21(土) 17:32 -

引用なし
パスワード
   γ さん
ご検討ありがとうございます。
難しい、ということは良く分かりました。
一般的なやり方では弾かれてしまうのですね。

後だしではありますが、参考記事は無いものかと探していたところ、
www.excel.studio-kazu.jp/kw/20150419215231.html
がありました。
これは参考になるでしょうか(私はどこをアレンジすれば……というレベルです)
・ツリー全体表示

【80073】Re:iframe内の情報を取得
発言  γ  - 18/7/21(土) 13:59 -

引用なし
パスワード
   >Dim objFRAME As Object
>Set objFRAME = objIE.document.frames 
>MsgBox objFRAME(0).document.Title
> '↑↑↑まずここで取得出来ていないので、何かが間違っている
ローカルウインドウで、
objFRAMEのプロパティ(Onmessageとなかにか)を見ると、
アクセスが拒否されました、と表示されます。
サーバー側でスクレイピングへの対策が行われていると思います。

1.の質問(ページ内表示上限)に関連しますが、
Webクエリーを実行すると、表示数の変更ボックスが現れます。
50に変更して実行しますと、これも拒否されます。
administratorと相談せよ、IDはなにがし、といった表示がされます。

総体に、Webスクレイピングへの対策が採られているようですから、
障壁は厚いと思われます。
従って、単純にgetメソッドで情報が取得できるなどということは
期待できないと思います。
・ツリー全体表示

【80072】iframe内の情報を取得
質問  こうせつ  - 18/7/21(土) 11:44 -

引用なし
パスワード
   はじめて投稿をします。
介護事業所検索のiframe内に表示される情報を取得し、
Excelに貼付けをしていきたいと考えています。

www。kaigokensaku.mhlw.go.jp/27/index.php?action_kouhyou_pref_search_list_list=true&PrefCd=27&JigyosyoCd=276&p_sort_name=24


質問は以下2点です。
1.表示数の変更方法
ブラウザからですと、p_count内のValue値を直接書き換えることで、
表示される項目数を変更することが出来ました。
同じようにVBAでも可能でしょうか。
またはURLで制御できるでしょうか。
(p_sort_name欄はValue値をURLに記載することでselectedIndexの初期値を変えることができましたが、p_countは上手くいかず)

2.iframe内の情報を取得することが出来ません。
いくつかのサイトを参考に書いた(コピペした)のですが、
取得したいサイトへ落とし込みが出来ていません。


Sub test()

  Dim a As Object
  Dim 貼付 As Worksheet
  Dim objIE As InternetExplorer
  Dim objITEM As Object
  Set objIE = CreateObject("Internetexplorer.Application")

  objIE.Visible = True
  objIE.navigate " kaigokensaku.mhlw.go.jp/27/index.php?action_kouhyou_pref_search_list_list=true&PrefCd=27&JigyosyoCd=276&p_sort_name=24"

  Do While objIE.Busy = True Or objIE.readyState < 4
    DoEvents '処理待ち
  Loop
  
  Application.Wait Now + TimeValue("0:00:03") 'HTMLの読み込み待ち
  
  
  Dim objFRAME As Object
  Set objFRAME = objIE.document.frames 
  MsgBox objFRAME(0).document.Title
'↑↑↑まずここで取得出来ていないので、何かが間違っている
  

'名前を取得して貼り付けたい  
  For Each objITEM In objFRAME.getElementsByClassName("listSubDataTable")
    貼付.Cells(a, 1) = Replace(objITEM.innerText, vbCrLf, "")
    a = a + 1
  Next
  
End Sub


不明点あれば、ご指摘ください。
よろしくお願いします。
・ツリー全体表示

【80071】Re:FormulaプロパティでVlookup関数とMa...
発言  γ  - 18/7/20(金) 21:04 -

引用なし
パスワード
   >変数dから
>d.Address(True, False)
>とすればよいでしょう。
Worksheets(2).Cells(1, k).Address(True, False)
でしたかね。
どうも失礼しました。
・ツリー全体表示

【80070】Re:項目毎にシート分割する方法
発言  マナ  - 18/7/20(金) 19:30 -

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

4)の後に、フィルター解除が必要でした。

で、まずは手作業でできることを確認して
その後で、マクロの記録を実行し、
それをたたき台にするとよいでしょう。
・ツリー全体表示

【80069】Re:項目毎にシート分割する方法
発言  マナ  - 18/7/20(金) 19:00 -

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

例えば、こんな流れでできませんか

1)POSシートをコピー
2)シート名をWAIKIKIに変更
3)C列で、フィルター(WAIKIKIと等しくない)
4)抽出された行を削除
5)1)〜4)をMOANA、ALOHA_TOWER、KAHALAについて実施
・ツリー全体表示

【80068】項目毎にシート分割する方法
質問  hitik  - 18/7/20(金) 16:29 -

引用なし
パスワード
   項目毎にシート分割する方法がわからず困っています。

今、A列に日付、B列に曜日、C列に店舗名、D列に品名がそれぞれ書かれているシートがあります(各列1行目には「日付」「曜日」「店舗名」「品名」と書かれています)。シート名は「POS」です。

店舗名はWAIKIKI、ALA_MOANA、ALOHA_TOWER、KAHALAの4種類です。店舗別(営業地別)に4枚のシート(シート名はそれぞれWAIKIKI, ALA_MOANA, ALOHA_TOWER, KAHALAとする)に分割するコードはどうなるでしょうか?よろしくお願いします。
・ツリー全体表示

【80067】Re:FormulaプロパティでVlookup関数とMa...
発言  γ  - 18/7/20(金) 7:37 -

引用なし
パスワード
   D$1の所以外は変わらない固定の文字列なわけですね。
それなら、D$1を変数dから変換してから、
その固定文字列と & を使って連結すればよいわけです。

肝心のD$1部分は、
変数dから
d.Address(True, False)
とすればよいでしょう。
意味は VBAのヘルプでAddressプロパティを確認して下さい。
トライしてみて下さい。
・ツリー全体表示

【80066】Re:FormulaプロパティでVlookup関数とMa...
発言  初心者ママ  - 18/7/20(金) 0:04 -

引用なし
パスワード
   ▼γ さん:
ご返信ありがとうございます。
質問の作法をよく知らず失礼をして申し訳ありませんでした…
ワークシート上に下記関数を複数セルに直接書き込み用意する手間を省く方法はないかというのがそもそものゴールだったのですが、入り口がまず間違えていたのかもしれません…

C2に入力する関数
=IFERROR(VLOOKUP($A1,sheet2!$A2:$1048576,MATCH(sheet1!D$1(※),sheet2!$2:$2,0),FALSE),0)
※この関数をC2から指定の列数だけ右にコピーしていいき、右に1列ずれるごとにMATCH関数の検索値のセルがD1からE1、F1と一緒にずれる
・ツリー全体表示

【80065】Re:FormulaプロパティでVlookup関数とMa...
発言  基本方針  - 18/7/19(木) 7:12 -

引用なし
パスワード
   このサイトの基本方針から

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

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

また、マルチポストを明示的に禁止しているサイトとのマルチポストをしてはいけません。
・ツリー全体表示

【80064】Re:FormulaプロパティでVlookup関数とMa...
発言  γ  - 18/7/19(木) 6:56 -

引用なし
パスワード
   マクロの文法による式をセルに入れても
嬉しくないでしょう。
Rangeだとか言わずに、まずはワークシート上で
動作する式を確定するのが先決です。
(少なくとも)2箇所に質問してもあまり益がない筈。
回答は付きます。
どちらかに絞る方がよいです。
・ツリー全体表示

【80063】Re:FormulaプロパティでVlookup関数とMa...
発言  初心者ママ  - 18/7/19(木) 0:07 -

引用なし
パスワード
   γ さん

さっそくアドバイス頂きありがとうございます!!
ご指摘いただいた2か所修正した結果、無事動作しました。

が、(重ねての質問となり恐縮なのですが)Match関数の部分を値を返すのではなく、関数をそのまま残す方法はないでしょうか?

イメージとしてはマクロ処理結果、セルに
=Iferror(vlookup(検索値、検索範囲、Match(Worksheets(2).Cells(1, k),Worksheets(3).Range("2:2"),0),false),0)
※Kの変数は値を返す

と入って欲しいのですが、Match関数でやろうとすると無理がありますでしょうか。。
別の関数(Countif等でしょうか…)で記載する方法があればアドバイスいただけますと大変助かります。

よろしくお願いします。
・ツリー全体表示

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