Excel VBA質問箱 IV

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

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


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

【79221】Re:既に開いているIEの画面から、エクセ...
発言  カリーニン  - 17/6/16(金) 20:17 -

引用なし
パスワード
   >SendKeys "%{F8}"


これは
Alt+F8
ですのでマクロ実行のウィンドウが表示されます。

>F8を押すことで ページを切り替え、

ページの切替え、というのが何を示しているのかわかりません。
↓で見てもIEでF8キーには何も割り当ててないようですし。

ht tp://www.saka-en.com/windows-2/browser-function-key/
・ツリー全体表示

【79220】Re:既に開いているIEの画面から、エクセ...
質問  keen  - 17/6/16(金) 20:03 -

引用なし
パスワード
   ▼keen さん:
>▼カリーニン さん:
>>私はほとんど使ったことが無いのですが、場合によってはWEBクエリも有効です。
>
>
>ありがとうございます。
>F8を押すことで ページを切り替え、切り替え後のデータをコピペするということを、数百回繰り返します。繰り返すのはどうしたらいいでしょうか?

また、私が作成したものは F8を押せていないようです。
エクセルファイル上で、F8を押しているようで こちらもどうすればいいでしょうか。
何から何まで申し訳ありません、よろしくお願いいたします。
・ツリー全体表示

【79219】Re:既に開いているIEの画面から、エクセ...
お礼  keen  - 17/6/16(金) 19:50 -

引用なし
パスワード
   ▼カリーニン さん:
>私はほとんど使ったことが無いのですが、場合によってはWEBクエリも有効です。


ありがとうございます。
F8を押すことで ページを切り替え、切り替え後のデータをコピペするということを、数百回繰り返します。繰り返すのはどうしたらいいでしょうか?
・ツリー全体表示

【79218】Re:既に開いているIEの画面から、エクセ...
発言  カリーニン  - 17/6/16(金) 18:57 -

引用なし
パスワード
   私はほとんど使ったことが無いのですが、場合によってはWEBクエリも有効です。
・ツリー全体表示

【79217】Re:エクセルでメール送信
発言  カエムワセト  - 17/6/16(金) 18:48 -

引用なし
パスワード
   メーラーのことについては書かれてないので考え方だけ。
申しましたように環境が無いのでこれくらいしか書けません。
また、一つのセルを変えるごとに通知するのですか?
ブックの共有者が取得できるのかはやはり環境が無いのでわかりませんので、
共有者のメアド一覧があるとの前提です。

「CDO」でネット検索してみてください。事例が見つかると思います。
CDOでしたらメーラーとかに関係なく使用できます。
メーラー指定となると面倒です。OUTLOOKとしても,、OUTLOOK VBAの知識が
必要になります。
・ツリー全体表示

【79216】Re:既に開いているIEの画面から、エクセ...
発言  カリーニン  - 17/6/16(金) 18:00 -

引用なし
パスワード
   複数のIEのテキストを取得する参考です。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub test()
Dim MyShell As Object
Dim MyWindow As Object
Dim cnt As Integer
Dim mybody As String
Dim mybdyline As Variant
 Set MyShell = CreateObject("Shell.Application")
 cnt = 0
 For Each MyWindow In MyShell.Windows
  If UCase(Right(MyWindow.FullName, 12)) = "IEXPLORE.EXE" Then
   cnt = cnt + 1
   mybody = MyWindow.Document.body.innertext
   Sleep 100
   DoEvents
   mybdyline = Split(mybody, vbCrLf)
   ActiveSheet.Cells(1, cnt).Resize(UBound(mybdyline) + 1) = WorksheetFunction.Transpose(mybdyline)
   Erase mybdyline
  End If
 Next MyWindow
End Sub
・ツリー全体表示

【79215】Re:既に開いているIEの画面から、エクセ...
発言  カリーニン  - 17/6/16(金) 17:48 -

引用なし
パスワード
   試した結果、一応はIEのテキストをシートに貼り付けできているようです。

InnnerTextを取得するようにすれば、クリップボードを介しなくてもテキスト
をシートに転記できるようになります。

※IEは一つのみ開いているとのことですが、同じものをいくつもセルに転記
するのは何故ですか?同じものでしたら、何回もコピペしないで一度コピー
したものを転記先を変えて繰り返し貼り付けするだけのような気がしますが。

あと、Alt+F8でマクロ実行のウィンドウを呼び出してますが、これは何故ですか?
別のマクロを手動で実行するためですか?

呼び出すマクロがきまってるのなら、Callするだけですが。
・ツリー全体表示

【79214】Re:ファイルをまたいだ数値の取得および...
お礼  まぐろ  - 17/6/16(金) 17:45 -

引用なし
パスワード
   γさま
大変お返事遅れてすいません。
頂いた式やコメントを参考に取り組み中です。
一度締め切ります。
ひょっとしたらまたご質問させて頂くかもしれませんが。

改めて、具体的な式まで書いて頂きありがとうございました。


▼γ さん:
>・各部門のシートはフォーマット(特に数値が入っているセルの位置)が統一されているか。
> 部門によっては、製品と製品の間に空行が入っているといったことがないか。
>・製品の数は各部門で違うとき、
> 単純に、最後の行までを対象に、製品の合計をとればよいのか、不明。
>などの疑問点があります。
>
>しかし、現時点で示されたものを前提にコメントしておきます。
>
>> Dim 変数 As Range
>> SET 変数 = RANGE を使うのかなと思いましたが、
>> 別ファイルからの取得なので、
>> SET 変数 = RANGE('[作業内容.XLS]部門A!B2)
>というところですが、
>Workbooks("aaa").Worksheets("BBB").Range("...") という形式のほうが
>よいでしょう。
>
>たとえば、こんな書き方ができるかもしれません。参考例です。
>Sub test()
>  Dim wbS As Workbook
>  Dim wbD As Workbook
>  Dim wsS As Worksheet
>  Dim wsD As Worksheet
>  Dim sh As Variant
>  Dim k As Long
>    
>  Set wbD = Workbooks("単月業績.xls")   'D: Destination(転記先)
>  Set wsD = wbD.Worksheets("6月")
>
>  Set wbS = Workbooks("作業内容.xls")   'S: Source(転記元)
>  For Each sh In Array("部門A", "部門B")
>    Set wsS = wbS.Worksheets(sh)
>    wsD.Cells(2 + k, "D").Value = getSum(wsS.Cells(2, 4))
>    wsD.Cells(2 + k, "E").Value = getSum(wsS.Cells(3, 4))
>    wsD.Cells(3 + k, "D").Value = getSum(wsS.Cells(4, 4))
>    wsD.Cells(3 + k, "E").Value = getSum(wsS.Cells(5, 4))
>    wsD.Cells(4 + k, "D").Value = getSum(wsS.Cells(6, 4))
>    wsD.Cells(4 + k, "E").Value = getSum(wsS.Cells(7, 4))
>    k = k + 4
>  Next
>Ens Sub
>
>合計する部分は、例えば関数にしておいて
>Function getSum(r As Range) As Long
>  getSum = r.Value + r.Offset(6).Value + r.Offset(12).Value
>End Function
>などとします。最大3つの製品に関する数値があるという前提です。
>
>上記コードはとっかかりに過ぎません。
>月に応じて、書込先の列を変えるとか、いろいろ改善点がありえます。
>
>なお、今後、実はこういう前提になっていました、
>という変更事項がありましてもコードを修正する積もりはありません。
>予め、お断りしておきます。
>
>上記は単なるヒントですから、
>それを参考にしてあなたがトライしていただきたいと思います。
>
>なお、今後、予算と実績の比較とか色々な分析をされると思うので、
>現在のフォーマットが適当なものかも不明です。
>ピボットテーブルなどの利用できる形式の書式のほうがよいかもしれませんね。
>
>それでは頑張ってください。
・ツリー全体表示

【79213】OLEObject
質問  kuma  - 17/6/16(金) 17:12 -

引用なし
パスワード
   EXCEL2010です
コンボボックスを複数ACTIVEXコントロールとしてシート上に設定しています。
CMB11,CMB12.....という具合(シートには約100個くらいあります)
これを参照するとき
worksheets("sheet1").OLEObjects("CMB" & i).object.value
とするとオブジェクトが正しくない(438)がでます
サイトで検索してみたのですが名前での参照ができるのはexcel2013以降?ぽい
記述でした
どのコンボボックスも =EMBED("Forms.Combobox.1",")です
簡単な参照方法を教えてください。
できればINDEXでループする方法
よろしくお願いします
・ツリー全体表示

【79212】既に開いているIEの画面から、エクセルに...
質問  keen  - 17/6/16(金) 16:50 -

引用なし
パスワード
   keenと申します、初めて質問させていただきます。
よろしくお願いいたします。

1.既に開いているIEの画面(1つのみ開いている)のデータを全選択
2.エクセルに貼り付け
3.F8ボタンを押して画面を切り替え
4.エクセルの列を横に1列ずらして、1.以降を繰り返す

上記内容を自動できないか、試行錯誤しています。

以下準備したのですが、IEの表示内容を全選択できておらず、
クリップボードの内容がエクセルに貼り付けされるのみです。

大変お手数をおかけいたしますが、どのように修正をすればよいか、
ご教示いただけますでしょうか。

なにとぞよろしくお願いいたします。


Sub abc()

  Dim objShell As Object, objWindow As Object

  Set objShell = CreateObject("Shell.Application")
  
  For Each objWindow In objShell.Windows

  If TypeName(objWindow.document) = "HTMLDocument" Then     
      
  objWindow.ExecWB 17, 0 
  objWindow.ExecWB 12, 0
  Range("A1").Select
  ActiveSheet.PasteSpecial Format:="テキスト"
  SendKeys "%{F8}"
    
  objWindow.ExecWB 17, 0 
  objWindow.ExecWB 12, 0
  Range("B1").Select
  ActiveSheet.PasteSpecial Format:="テキスト"
  SendKeys "%{F8}"
 
  ‘以下Range(“”)の中のセル番号を変えて式を続ける   
    
End If
Next
  
Set objShell = Nothing
Set objWindow = Nothing

End Sub
・ツリー全体表示

【79211】Re:エクセルでメール送信
回答  エリヤ  - 17/6/16(金) 13:11 -

引用なし
パスワード
   ▼カエムワセト さん:
>わざわざメールが必要ですか?
>どこかにログを書きだすとかではだめなのですか?
>※当方ブックの共有はしたことがなく、また環境もないので
>出来るかは検証してませんが。

ありがとうございます。
全部で11種類のファイルを共有していまして、
どれが更新されているか、一々見に行かなければならず、
非効率なので、各人にメールが届くと便利だなということなんです。
よろしくお願い致します。
・ツリー全体表示

【79210】Re:エクセルでメール送信
発言  カエムワセト  - 17/6/16(金) 13:06 -

引用なし
パスワード
   わざわざメールが必要ですか?
どこかにログを書きだすとかではだめなのですか?
※当方ブックの共有はしたことがなく、また環境もないので
出来るかは検証してませんが。
・ツリー全体表示

【79209】エクセルでメール送信
質問  エリヤ  - 17/6/16(金) 9:46 -

引用なし
パスワード
   エクセルファイルを何名かで共有していますが、
誰かが書き込んだら全員に、メールで書き込んだ旨を知らせたいのですが、
そんなことはできるのでしょうか?

内容までは行かなくても、誰かが書き込んだことのみ知らせたいのです。

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

【79208】Re:If
発言  マナ  - 17/6/14(水) 21:11 -

引用なし
パスワード
   ▼トキノハジメ さん:

条件付き書式を使うのが簡単ですね。
条件は4種類です。
・ツリー全体表示

【79207】Re:If
質問  トキノハジメ  - 17/6/13(火) 22:12 -

引用なし
パスワード
   ▼カエムワセト さん:
>セルを変数に格納してループで処理すればいいのでは?

返信ありがとうございます。少し躯体的に教えててただけないでしょうか。

御無理なお願いで申し訳ございません。ひとつ、宜しくお願いいたします。

・ツリー全体表示

【79206】Re:If
発言  カエムワセト  - 17/6/13(火) 19:22 -

引用なし
パスワード
   セルを変数に格納してループで処理すればいいのでは?
・ツリー全体表示

【79205】Re:If
質問  トキノハジメ  - 17/6/13(火) 19:05 -

引用なし
パスワード
   ▼カエムワセト さん:
有り難うございました。一つのセルに対するコードは良く解りまいた。
   A    B    C   D   E   F
1  栗坂  美坂  栗C   美W
2  51.7   53.3   84.8   84.3
5  37.3   37.6   50.2   50.5

上記の様に A1 B1 C1 D1 等 4種類がランダムに出てきます。これが 20程続いてます。これ等をしょりするのは如何すれば良いのか教えて下さい。
宜しくお願い致します。
・ツリー全体表示

【79204】Re:dドライブを常にアクティブにするには
発言  カエムワセト  - 17/6/13(火) 9:35 -

引用なし
パスワード
   こういう記事がありました。参考まで。

ht tp://michisugara.jp/archives/2013/windows8.1_hdd.html
・ツリー全体表示

【79203】Re:dドライブを常にアクティブにするには
発言  Pomerol E-MAIL  - 17/6/13(火) 3:32 -

引用なし
パスワード
   ▼カエムワセト さん:
>Dドライブて内蔵ではなく外付けですか?
>アクティブの意味がよくわかりませんが、スリープモードではない、
>ということでしたら、エクセルの問題ではなく、その外付けドライブ
>の問題です。
>使用説明書を読むか、メーカーのサポートに問い合わせてください。

ご回答、たいへんありがとうございます、カエムワトセさん。
内蔵hddです。アクティブの表現、適切でなくてすみません。パソコンをいじっていて、しばらくdドライブにアクセスしないと、アクセスしたとき、dドライブが、まず回転を始めて、3秒くらい経って、dドライブが反応しますよね。私は、vbのプログラムが動いているときは、常時、dドライブに回転していて欲しいのです。二つのやり方があると思うのですが。
1 vbaのコードでdドライブを常に回転させるコードがあれば、そのコードをvbプログラムの先頭行に書く
2 os(windows10)の設定の問題であれば、そのように設定する。
どちらかの方法でいいので教えていただければありがたいです。
・ツリー全体表示

【79202】Re:dドライブを常にアクティブにするには
発言  カエムワセト  - 17/6/12(月) 18:52 -

引用なし
パスワード
   参考まで。

Office TANAKA - Excel VBA FileSystemObject[IsReadyプロパティ]
ht tp://officetanaka.net/excel/vba/filesystemobject/drive06.htm
・ツリー全体表示

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