Excel VBA質問箱 IV

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

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


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

【80088】数値をテキストに変換する
質問  M  - 18/8/7(火) 10:42 -

引用なし
パスワード
   指定したセルの数字を10桁、6桁、7桁にそれぞれ変換するマクロは
どうしたらよいでしょうか。
ご教授いただければ幸いです。
・ツリー全体表示

【80087】Re:'0487.65E-03を演算可能な数字に変換...
お礼  RyanKey  - 18/8/6(月) 15:14 -

引用なし
パスワード
   ありがとうございます!

こんな簡単にできるんですね…
MID関数、かなり便利そうなので覚えておきます

また機会があればその時はよろしくお願いします
・ツリー全体表示

【80086】Re:'0487.65E-03を演算可能な数字に変換...
回答  よろずや  - 18/8/6(月) 14:18 -

引用なし
パスワード
   A1 に「DCV_ 0487.65E-03」が入っているとして、
B1 に「=MID(A1,FIND(" ",A1)+1,255)*1」
で普通に、「0.48765」になりますけど。

Excel2010
・ツリー全体表示

【80085】'0487.65E-03を演算可能な数字に変換する...
質問  RyanKey  - 18/8/6(月) 12:10 -

引用なし
パスワード
   GPIBを用いて計測データを読み取りEXCELに出力するプログラムを作成しています。
ibird関数を使うことでDCV_ 0487.65E-03というように値を読むことはできるのですが
この値は文字列のようで、spilt関数を使って分離し「0487.65E-03」の部分だけ
EXCEL上に出力しても'0487.65E-03と、演算するには不適切な書式になり困っています。

'(シングルコーテーション)を取り除くために1をかける、書式を変更する等はやってみたのですが、'を消すことができても演算可能な形にすることはできませんでした。(この数式には誤りがありますのエラーが出る)
0487.65E-03の部分を演算可能な数字にすることはできないでしょうか。

解決法の一つとしてセルごとではなく、 0487.65E-03という部分のみを手動でコピーして空白のセルに貼り付ければ、0.48765と数字として認識し、演算可能になります
ただ、これは非常に手間と時間がかかるためあまりやりたくありません。

何か良い方法、上記の解決法を自動化できるようなプログラムをご存知の方がおられましたら、教えていただけると幸いです。

使用しているEXCELは2016です。

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

【80084】Re:教えてくささい。
お礼    - 18/8/5(日) 19:27 -

引用なし
パスワード
   ▼γ さん:
>こんな風にしてみたら。
>
>Sub test()
>  Dim 検索値 As Variant
>  Dim 検索結果 As Range
>  Dim 最初結果 As Range
>  Dim 結果範囲 As Range
>  Dim データ範囲 As Range
>  
>  Set データ範囲 = ActiveSheet.UsedRange
>  
>  検索値 = InputBox("検索する文字列を入力してください")
>  If 検索値 = "" Then
>    MsgBox "検索がキャンセルされました"
>    Exit Sub
>  End If
>  
>  Set 検索結果 = データ範囲.find _
>        (What:=検索値, LookIn:=xlValues, LookAt:=xlWhole, _
>        SearchOrder:=xlByColumns, MatchCase:=True, MatchByte:=True)
>  If 検索結果 Is Nothing Then
>    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
>
>●インデントをしっかりつけることは、あなたが考えている以上に大事なことですよ。


返信ありがとうございます。
自分の勉強不足を非常に痛感しております。
返信していただいたvbaを実行させていただきました。
非常に満足しています。
本当にありがとうございました。
今後またわからない事が多々あると思いますので、
よろしくお願いします。
・ツリー全体表示

【80083】Re:教えてくささい。
回答  γ  - 18/8/5(日) 18:43 -

引用なし
パスワード
   こんな風にしてみたら。

Sub test()
  Dim 検索値 As Variant
  Dim 検索結果 As Range
  Dim 最初結果 As Range
  Dim 結果範囲 As Range
  Dim データ範囲 As Range
  
  Set データ範囲 = ActiveSheet.UsedRange
  
  検索値 = InputBox("検索する文字列を入力してください")
  If 検索値 = "" Then
    MsgBox "検索がキャンセルされました"
    Exit Sub
  End If
  
  Set 検索結果 = データ範囲.find _
        (What:=検索値, LookIn:=xlValues, LookAt:=xlWhole, _
        SearchOrder:=xlByColumns, MatchCase:=True, MatchByte:=True)
  If 検索結果 Is Nothing Then
    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

●インデントをしっかりつけることは、あなたが考えている以上に大事なことですよ。
・ツリー全体表示

【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について実施
・ツリー全体表示

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