トップページtech
1002コメント383KB

Excel VBA 質問スレ Part39 [転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2015/11/27(金) 20:36:45.35ID:9HV+ag/s
ExcelのVBAに関する質問スレです

                   ___
       ___      /____ヽ      ____
      /____\    | |´・ω・`| |    /___ヽ
      .l |´・ω・`|  ニX二 . ̄ ̄ ̄  二X二  |´・ω・`| l 俺たちに任せろ
      !、 ̄ ̄ ̄  ヽ   |       |    /    ̄ ̄ ̄/
       ヽ_/ヽ、  ヽ__)  \__/\_/.   /_/  ノヽ_/
             ̄                ̄ ̄

このスレはコード書き込みOKです。
作成依頼もOKですが、作成依頼限定ではありません。

コードが嫌な人・作成依頼が嫌な人は別スレ建ててください。

※前スレ
Excel VBA 質問スレ Part38 [転載禁止]2ch.net
http://peace.2ch.net/test/read.cgi/tech/1441619979/
0693デフォルトの名無しさん2016/01/29(金) 22:56:37.31ID:xL/2dOZ2
コレクションはaddした順になってるってどっかで読んだな
0694デフォルトの名無しさん2016/01/29(金) 22:59:33.85ID:SzcTnZpo
>>692
できるはずだけど
0695デフォルトの名無しさん2016/01/29(金) 23:03:44.66ID:x5GxlBbm
>>694
どのようにやるのか教えていただけませんか?
0696デフォルトの名無しさん2016/01/29(金) 23:11:05.17ID:zGtXhGWM
>>695
それはトレードオフだな
0697デフォルトの名無しさん2016/01/29(金) 23:33:04.61ID:SzcTnZpo
>>695
ieオブジェクトから探してみたら
useragentプロパティとかそれらしいの
または偽装のpostデータを送信すれば偽装できる
0698デフォルトの名無しさん2016/01/30(土) 00:18:29.02ID:WsSatOj8
>>695
Navigateメソッドに Headersパラメータあるよ ここで指定する
0699デフォルトの名無しさん2016/01/30(土) 01:09:42.28ID:QZN0GaAw
符号なし32bit値を普通に扱いたいのだが
所々にオーバーフローの罠が仕掛けられている
どうしたものか
0700デフォルトの名無しさん2016/01/30(土) 02:47:34.76ID:wZlCWGLp
>>699
64bit版ならlonglongをマスクして使う
32bit版ならあきらめてVBを使うとか文字列で処理するとか
0701デフォルトの名無しさん2016/01/30(土) 21:48:03.29ID:9q1UC1/m
(単位百万円)ってよく書いてるだろ
0702sage2016/01/30(土) 22:42:24.01ID:DtupSwoU
貼り付けをする時は、「値のみ貼り付け」のみにしたいのですが

Sub 値貼り付け()
Dim SEL As String
SEL = ActiveCell.Address
On Error Resume Next
Range(SEL).PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
End Sub


これで制御できたと思ったんですが、ENTERキーを押すと
数式まで貼り付けられてしまうのでENTERキーでも「値のみの貼り付け」はできないでしょうか?
0703デフォルトの名無しさん2016/01/30(土) 23:17:21.27ID:WsSatOj8
>>702
やりたい事がわからない もうすこし詳細な説明をして下さい

そのマクロとENTERキーの関係とか
0704sage2016/01/30(土) 23:53:42.67ID:DtupSwoU
>>703
週のはじめに各従業員が行先と訪問時間などを入力する
表を作りたいのです。
毎週、お客さんのところに行く曜日や時間が変わるので
コピペして運用したいのです。

しかしあまりPCに不慣れな人もいて、コピペしてしまい
関数が乱れてしまいます。

そこで、貼り付けを制御をしたいです。
上のマクロで用意してあるフォームボタンだけなら
問題ないのですが、コピーした後にENTERキーを押してしまう
人がいて困っています。
0705デフォルトの名無しさん2016/01/31(日) 00:29:23.55ID:GHH7Ytwp
>>704
データ入力者が複数いる場合は、ワークシートに時間などを直接入れるんじゃなくて
入力フォームを使うのが定番の方法です
0706デフォルトの名無しさん2016/01/31(日) 00:43:56.18ID:MM1DiLhb
>>704
だいたいさ、なんでお前が
考えることを放棄してるような感じになってるの
どこの能力が足りないわけ
0707デフォルトの名無しさん2016/01/31(日) 00:53:42.54ID:hQeW+ttM
>>704
コピペ運用そのものを やめて見直すべきだと思うよ

どうしてもというなら
↓のようにCopy/Paste 両方ボタンにして モジュール変数を使うとか

Private BUF As Variant

Sub 値Copy()
BUF = ActiveCell.Value
End Sub

Sub 値Paste()
ActiveCell.Value = BUF
End Sub
0708デフォルトの名無しさん2016/01/31(日) 14:40:54.90ID:yZ5QuPZH
IFの入れ子は何個まで書きますか?
皆さんの経験上大体何回ぐらいが限界だとおもいますか?
0709デフォルトの名無しさん2016/01/31(日) 14:55:35.44ID:fJmO8CE1
純粋にIfだけの入れ子にするくらいなら、

Dim S As Long
If (条件A) Then S = 1
If (条件B) Then S = S + 2
If (条件C) Then S = S + 4
...
Select Case S
Case 1

Case 2

...

みたいな形にした方がいいと思う。
途中にループとか挟まるなら関数として分けろ。
0710デフォルトの名無しさん2016/01/31(日) 17:31:33.51ID:oGNCocg8
初稿では基本入れ子にならないように書いてる
でも増改築していくと結局4つぐらいになってる
0711デフォルトの名無しさん2016/01/31(日) 17:46:37.03ID:k5bfrJJo
>>708
前に書いたけど、分岐はその使い方によって以降の分岐を避けられる場合がある。
Case文の場合は作られたケースを順番に評価するのはトレースすると解るよね。

まずそこで使い分けが発生するんだけど、単純にそれで書くと読みにくくなることがある。
処理のレスポンスと可読性どちらを取るかはケースバイケースで、組んでる人のセンスの見せ処にもなる。

後は上の人がループの切り分けの話をしていたけど俺の感覚からすれば
関数やメソッドは単一責任原則に則って作っていればループや分岐は別に分かれていなくてもいいと思ってる。

つまり何が幾つまでという切り分けで作るのではなく一つの役割で一つの関数やメソッドを作っておけば、
基本スパゲティコードになることはない筈なので
後は分岐数は見やすければお好きにどうぞと言いたい。俺個人の意見としてはね。
0712デフォルトの名無しさん2016/01/31(日) 21:42:48.93ID:3A1xW7mu
>>709
>>710
>>711
ありがとうございます。
1行だけの単純命令ならいくらでも入れ子できそうですが
本日多数の関数を持ったelse付きの数行あるコードを4層構造に仕込もうとしましたが
複雑に入り組みすぎて、途中で脳が沸騰しそうになり未だに完成していません。
Caseでやるのもよさそうですね
正直もうくたくたで何もやる気も起きません。
0713デフォルトの名無しさん2016/01/31(日) 21:49:46.31ID:3A1xW7mu
VBAのコードを半日近く書き続けて煮詰まってくると頭痛がしてくるのは私だけでしょうか?
0714デフォルトの名無しさん2016/01/31(日) 22:37:46.23ID:fN9K6rqb
老化といいます
0715デフォルトの名無しさん2016/01/31(日) 22:44:30.24ID:/MiBgNRG
たいへんもうしわけごさいません
0716デフォルトの名無しさん2016/01/31(日) 22:54:07.60ID:fJmO8CE1
コードはこんがらがってきたら無理せずに一回捨てて、
それまでで得られた結果を反映した強くてニューゲームした方がいい。

ただしアルゴリズムとかマトモに学んでないと、そういう時に手段が限られて苦労する。
0717デフォルトの名無しさん2016/01/31(日) 23:37:12.06ID:OOAiq76c
プログラムの設計は難しい。
小さな問題と大きな問題の両方に悩まされる。
一筋縄ではいかない。
0718デフォルトの名無しさん2016/02/02(火) 19:46:44.38ID:n8+/YJjg
フリーズした?
0719デフォルトの名無しさん2016/02/02(火) 21:29:47.13ID:xMBhBprB
株探の決算表から、ウェブクエリでテーブルをエクセルに取り込むことは出来ました。
しかし100銘柄〜200銘柄も取り込むと膨大な時間がかかってしまいます。
取り込む時間を最小限にするために、テーブルの中の一か所だけを取り込むようにしたいです。

例:
・URL http://kabutan.jp/stock/finance?code=1301
・テーブル「今期予想」の「予 2016.03」の「経常益」のみ(3000という数字)を取り込みたい


―――参考までに「ウェブクエリでテーブルをエクセルに取り込むマクロ」―――
Sub sssample2()
Dim fff As String

fff = ThisWorkbook.Path & "http://kabutan.jp/stock/finance?code=1301";
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;" & fff, Destination:=Range("B2"))

.RefreshStyle = xlOverwriteCells
.WebTables = "12"
.WebFormatting = xlWebFormattingNone
.Refresh BackgroundQuery:=False

End With
End Sub
――――――――――――――――――――――――――――――――――

よろしくお願いします。
0720デフォルトの名無しさん2016/02/03(水) 00:11:42.99ID:phHyrAir
>>719
ウェブクエリはテーブルの一部だけを取り込むことは基本的にできないし、
そもそも動作が遅すぎるので大量データの取得には向いてない
「XMLHTTPオブジェクト」おすすめ
0721デフォルトの名無しさん2016/02/03(水) 01:21:36.38ID:xSOyaD7A
ありがとうございます
ハードルは高そうですが調べてみます
0722デフォルトの名無しさん2016/02/03(水) 10:22:57.26ID:/plcvGK1
すいません
すっごい初心者な質問なのですが…
vbaでie操作して最後にieで完了ページが表示された事を確認してからieを閉じたいのですが

if instr(objIE.document.body.innerhtml."完了しました。") 〉0 then
とじる
else
やりなおし
end if

としていますが機能していないようで
こういう目的の場合どういった方法を取るものなのでしょうか
0723デフォルトの名無しさん2016/02/03(水) 12:15:31.59ID:kFs/rV/l
objIE.document.body.innerhtmlの内容は確認したの?
0724デフォルトの名無しさん2016/02/03(水) 13:23:42.06ID:zCM4JqWj
>>722
機能していないとは?
0725デフォルトの名無しさん2016/02/03(水) 21:32:48.21ID:HBzsb+pO
A列に氏名、B列に勉強科目、C列に勉強時間が入力されたデータがあり、
各人の最も勉強した科目は何でその勉強はいくらかを計算するプログラムを作りたいのですが、
何か良い案をお教えいただけないでしょうか?
またこのようにプログラムを全く思いつかない場合、どのように検索・勉強すればよいのでしょうか?
宜しければご教授下さい
07267252016/02/03(水) 21:34:02.56ID:HBzsb+pO
>>725
>勉強はいくらか
「勉強時間はいくらか」の間違いです。
申し訳ありません
0727デフォルトの名無しさん2016/02/03(水) 22:06:22.01ID:owuQJz30
>>725
検索キーは [VBA クロス集計]

クロス集計はこんな感じ
http://www4.synapse.ne.jp/yone/excel_exercise/exercise_vba_cross.html
07287252016/02/03(水) 22:22:33.44ID:HBzsb+pO
>>727
早速の返信ありがとうございます
おかげさまで解決出来ました
心より感謝申し上げます
0729デフォルトの名無しさん2016/02/05(金) 00:08:37.08ID:TXCmVTvB
質問です。
ExcelのVBAでDo While Cellsを使用して
sheet1のA6セルに入力されたデータをsheet2のS列のデータと比較し
重複データがあれば「重複データが存在します」
なければ「重複チェック終了しました」とメッセージ表記されるようにしました。
これで続けて重複データをsheet1のA10以降に表示されるようにしたいです。
この後にどのように入力したらいいでしょうか。
当初はオートフィルでやってたのですが、cells利用してもできると聞いて
調べて見たのですがよくわからなくて困っています。
数日前に始めたばかりで勝手がわかっていなかったらすみません。
0730デフォルトの名無しさん2016/02/05(金) 00:36:52.27ID:blBw672Y
>>729
とりあえず、作ったVBAをどこかに貼って
短ければここでもいいし
0731デフォルトの名無しさん2016/02/05(金) 00:50:11.46ID:U+VxVXPf
A6から急にA10に話が飛んでる理由は何なの
ウォートホッグなの
0732デフォルトの名無しさん2016/02/05(金) 04:20:30.65ID:tis1OD9T
もしA6の値が、S列に含まれていれば、
A10に、A6の値を代入する

A10 = A6の値
0733デフォルトの名無しさん2016/02/05(金) 04:25:48.17ID:LfaH5pAK
今日は書けるかな
0734デフォルトの名無しさん2016/02/05(金) 04:40:03.69ID:LfaH5pAK
Sub test()
ccc = 1
For Each eee In Sheets("Sheet2").Range("S1:S100")
If eee.Value = Sheets("Sheet1").Range("A6").Value Then
Sheets("Sheet1").Range("A10").Cells(ccc, 1) = eee.Value
ccc = ccc + 1
End If
Next
End Sub
0735デフォルトの名無しさん2016/02/05(金) 05:36:50.98ID:eBNdrWRt
たまにxlsmファイルがプロジェクトまたはライブラリが見つかりませんと出て動作を停止してしまうのはなんなんだろう
その度新しくブックを作り直さなきゃならなくなる
07367292016/02/05(金) 11:08:36.96ID:j1/kW8gU
レスありがとうございます。
>>730
Sub sheet1()
'
' sheet1 Macro
'
Dim i, ii As Integer
i = 0
ii = 0
Do While Cells(6 + i, 2) <> ""
Do While Worksheets("sheet2").Cells(2 + ii, 2) <> ""
If Cells(6 + i, 2) = Worksheets("sheet2").Cells(2 + ii, 2) Then Worksheets("Sheet2").Cells(2 + ii, 2).Value = Cells(10 + i, 2).Value
  ii = ii + 1
Loop
i = i + 1
Loop
MsgBox ("重複チェック終了しました。")
Exit Sub
End Sub

>>729の後、データの存在の有無は不要ということで終了後に「重複チェック終了しました。」と表示されるだけにしました。
これで実行してもメッセージが出るだけでデータの抽出ができません。

>>731
sheet1のA6に入力欄を作り、実行するとA10以下に表示される、という仕組みを作りたかったので…
これまでVBAに触ったこともなかったので色々と効率の悪いことをしていると思います。
0737デフォルトの名無しさん2016/02/05(金) 12:44:29.76ID:VJfh6At3
質問です。
シートモジュールに@のコードを書くとうまくいきますが、Aのコードを書くと
上手くいきません。
なぜなんでしょうか?教えてください。

@
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Sheet2.Cells(Target.Row, 5) = Time
Sheet2.Cells(Target.Row, 5).Copy
ActiveSheet.Cells(17, 5).Paste

End If
End Sub

A
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Sheet2.Cells(Target.Row, 5) = Time
Sheet2.Cells(Target.Row, 5).Copy
ActiveSheet.Paste

End If
End Sub
0738デフォルトの名無しさん2016/02/05(金) 14:28:18.31ID:7bhw2NUK
>>736
やりたい事 今一つ分ってないけと なんとなく
If Cells(6 + i, 2) = Worksheets("sheet2").Cells(2 + ii, 2) Then Worksheets("Sheet2").Cells(2 + ii, 2).Value = Cells(10 + i, 2).Value
これ
・・・・・・・・Then Cells(10 + i, 2).Value = Worksheets("Sheet2").Cells(2 + ii, 2).Value
じゃないかなと思うのだけど(代入文の 右辺と左辺が逆)


>>737
EXCELのバージョンはいくつ?

俺ん所(EXCEL2016)では
目的どおり動作するかどうか関係なく 単純に動く/動かないだと
@ Pasteで実行時エラー
A 動く
なんだけどな
0739デフォルトの名無しさん2016/02/05(金) 14:54:32.80ID:VJfh6At3
>>738
Excel2010です。
何が原因なんでしょうか?
0740デフォルトの名無しさん2016/02/05(金) 15:07:44.85ID:RDrjDYLW
単純に↓でいいのでは?

Worksheets(2).Select
Cells(target.Row, 5)=Time
Cells(17, 5) = Cells(target.Row, 5)
0741デフォルトの名無しさん2016/02/05(金) 15:19:29.05ID:VJfh6At3
>>740
返信ありがとうございます。
sheet2でコピーしたものをシート1に持ってきたいのです。

ご教示お願いします。
07427382016/02/05(金) 15:22:59.01ID:7bhw2NUK
>>739
ちょっと確認
>>737 の通り
@ ○
A ×
の動作でいいのよね
俺ん所では 逆だから これ以上は回答できないけど
0743デフォルトの名無しさん2016/02/05(金) 15:29:10.07ID:RDrjDYLW
>>741
activesheetを1にした場合で
copyする範囲がa1〜h1だとした例

With Worksheets(2)
For i = 1 To 8
Cells(1, i) = .Cells(1, i)
Next i
End With
0744デフォルトの名無しさん2016/02/05(金) 15:32:26.54ID:VJfh6At3
>>742
すいません、おっしゃる通り逆でした。

A○

>>743
試してみます。
07457382016/02/05(金) 15:37:37.09ID:7bhw2NUK
>>744
なら
https://www.moug.net/tech/exvba/0050103.html
のように
Destination を指定する
0746デフォルトの名無しさん2016/02/05(金) 15:58:15.69ID:VJfh6At3
>>745
無事にできました。
ご教示ありがとうございます。
0747デフォルトの名無しさん2016/02/05(金) 21:58:27.26ID:qfst1uAU
オートシェイプの図形(たとえば角丸四角形)にマクロを割り振って
そのプロシージャ内でApplication.Caller で呼び出し元を調べると
"角丸四角形 1" とか出てくるけど、その図形のNameプロパティーを調べると
”Rounded Rectangle 1" っていうふうに英語名で出てくる。

シート上の複数の図形から同じプロシージャを呼び出して、
呼び出し元の図形の列位置(Column)に応じて処理を分岐させるってのをやりたくて
こんなコード書いたんだけど、
Application.Caller の結果と Nameプロパティーが違うんで上手くいかなかった。

Sub Test()
Dim v As Variant
Dim shp As Shape
Dim clm As Long
v = Application.Caller
For Each shp in Thisworkbook.Sheets(1).Shapes
 If shp.Name = v Then
  clm = shp.Column
  Exit For
 End If
Next shp
End Sub

できればどっちか(なるべくなら英語のほう)に統一したいんだけど、
どうすりゃいいの?
0748デフォルトの名無しさん2016/02/05(金) 22:08:37.95ID:blBw672Y
>>747
ActiveSheet.Shapes(Application.Caller).Name
あたりで英語の名前が取得できるはず
0749デフォルトの名無しさん2016/02/05(金) 22:27:47.03ID:RDrjDYLW
>>747
複数の画像をシートに配置し1画像をクリックしたら個々の処理をしたい
そのマクロを画像数に関係しないで1ルーチンでしたい、、ってことかな?
0750デフォルトの名無しさん2016/02/05(金) 22:33:57.04ID:qfst1uAU
>>748さま
早速の回答ありがとうございます。

Sub Test()
Dim ws As Worksheet
Dim str As String
Dim shp As Shape
Dim clm As Long
Set ws = ThisWorkbook.Sheets(1)
str = ws.Shapes(Application.Caller).Name
For Each shp In ws.Shapes
 If shp.Name = str Then
  clm = shp.TopLeftCell.Column
  Exit For
 End If
Next shp
Set ws = Nothing
Debug.Print clm
End Sub

おかげさまで無事に期待通りの動作になりました。
0751デフォルトの名無しさん2016/02/05(金) 22:36:08.61ID:qfst1uAU
>>749さん
すみません、リロードしてなかったので気付きませんでした

>そのマクロを画像数に関係しないで1ルーチンでしたい、、ってことかな?

そうです、そんな感じです
0752デフォルトの名無しさん2016/02/06(土) 08:53:13.29ID:P3+owK3w
>>751
おいらの場合だが、、画像を貼る時
ユニーク(唯一)な画像名を入れ、実行するマクロ名は全て同一にしている

マクロのほうでクリックされた画像名を取得すれば、どうにでもできる
0753デフォルトの名無しさん2016/02/06(土) 09:06:55.95ID:P3+owK3w
画像名の指定
objshape.name
マクロの登録については
selection.onactionあたりをgoogってw
0754デフォルトの名無しさん2016/02/06(土) 15:32:47.34ID:lnO4bcRF
質問
セル範囲をctrol+Cとかでクリップボードにいれた状態で
その内容をVBAで配列等にしたい場合、内容を地道にCRLFとHTでsplitするしか方法がないのでしょうか
0755デフォルトの名無しさん2016/02/06(土) 19:18:20.53ID:o+SuU72l
>>736
質問の答えは>>738の通りと思うけど気になった点を2つほど
・A6以降の値を調べるならループ必要だけど、A6のみなら最初のDoループは不要では?
・最後のExit Subは自分なら書かないかな(なくても問題ないため)
0756デフォルトの名無しさん2016/02/06(土) 19:26:54.79ID:k9/r4E4x
>>754
なぜクリップボードに入れる前に普通にValueプロパティで配列化しないの?
0757デフォルトの名無しさん2016/02/06(土) 19:29:16.46ID:d/rSshNV
>>754
Rangeオブジェクトを使う方向で考えた方がいい
Rangeから配列へはVariant変数にただ代入するだけ
0758デフォルトの名無しさん2016/02/06(土) 19:48:03.96ID:eyuorlki
VBAでコマンドプロンプトの実行させたいんですがどうやればいいんでしょう?
ググったりしてたんですが意味わからんものでしてそれぞれのプログラムの説明も良かったら頼みます
やりたいことはコマンドプロンプトのコマンドの実行とコマンドプロンプト画面を表示したくないためです
0759デフォルトの名無しさん2016/02/06(土) 20:00:25.86ID:lnO4bcRF
>>756-757
通常なら提言通りの方法でやるのですが
システムの関係でExcelのインスタンスが2つになってるんです
そこでインスタンスAでCtrol+CをしてインスタンスBでマクロを動かし
クリップボードのセル範囲情報を取り出そうとしているんです
0760デフォルトの名無しさん2016/02/06(土) 20:54:04.56ID:l536E6T4
>>758
retval = Shell("c:\t\t.bat", vbHide)
0761デフォルトの名無しさん2016/02/06(土) 21:16:39.44ID:eyuorlki
>>760
ググったら「ExecかRunをWScript.Shellで実行」できるというのを見たんですがそれらと
>>760の実行は何か違いがあるんですかね?
それとググったら発見したんですが
CreateObject("WScript.Shell").Run "CMD.EXE C:\>コマンドプロンプトのコマンドの実行文", 0
これでも通じますか?また通じたとしたら何か問題ありますかね?
0762デフォルトの名無しさん2016/02/06(土) 21:25:25.27ID:d/rSshNV
>>759
基本Excelの中身ってCOMだからGetObjectでBからA見たりできるよ
getobject 複数 インスタンスでぐぐれ
0763デフォルトの名無しさん2016/02/06(土) 21:29:36.07ID:l536E6T4
>>761
字数の多いのは機能も多いだろう
軽自動車か高級車の違いで
コンビニ行くなら同じ
0764デフォルトの名無しさん2016/02/06(土) 21:40:35.45ID:eyuorlki
>>763
つまり>>760この実行文は余計なものを省いたような文なんでしょうかね?
それだったらありがたいんですがその実行文は何をしてるんですかね?
良かったら説明お願いします
0765デフォルトの名無しさん2016/02/06(土) 21:53:20.80ID:P9swx1tr
>761
× "CMD.EXE C:\>コマンドプロンプトのコマンドの実行文"
○ "CMD.EXE /C コマンドプロンプトのコマンドの実行文"
ですよ
×の方でやったらループして動かなくなった(EXCEL2016)

ちなみに
RC = CreateObject("WScript.Shell").Run("CMD.EXE /C コマンドプロンプトのコマンドの実行文", vbHide , True)
なら
マンドの実行終了を待ち合せてくれて 実行結果の終了コード(番号)が返ってきます(通常 正常終了は 0)
これは Shell関数は使えない。
0766デフォルトの名無しさん2016/02/06(土) 22:07:31.95ID:eyuorlki
>>765
それで実行できました
ところで
CreateObject("WScript.Shell").Run "empty *", 0
この実行文は前に作ったものなんですが違いはなんなんでしょう?
0767デフォルトの名無しさん2016/02/06(土) 22:14:02.79ID:cR3OuN6O
コマンドプロンプトでできること一般をVBAでやりたいのか、
特定のOSの機能を使いたいのかはっきりさせてほしいところだ。
0768デフォルトの名無しさん2016/02/06(土) 23:55:45.18ID:eyuorlki
>>767
タスク機能でバックグランド実行しようとしてたんですわ
0769デフォルトの名無しさん2016/02/07(日) 00:08:40.73ID:z3M1lb5n
なんで今さら、コマンドプロンプトやねん?

PowerShellでええやろ。
PowerShell_ISE でも使って見れば?

WSH, VBScript もあるし
0770デフォルトの名無しさん2016/02/07(日) 01:04:57.37ID:S151Vk4M
質問させてください。

Excelの右クリックにメニュー追加したいんですが、右クリックメニューって何種類ありますか?

Application.CommandBars("Cell")とかでRowとかいろいろあると思うんですが。

もしくは右クリックメニューすべてに追加するみたいな方法ってあるのでしょうか。
0771デフォルトの名無しさん2016/02/07(日) 10:07:38.16ID:GylIyJ2o
普段Mac使いなんですが、10年ぶりにWindowsでエクセルVBA書くことになった。。
昔はxp上のエクセル2003で作ってました。

今回はWindows7 32ビット
エクセル2013 32ビット

で作ります。
はあ
0772デフォルトの名無しさん2016/02/07(日) 12:20:07.64ID:lxD2jtcx
macはExcel使いづらいし良いと思うよ
0773デフォルトの名無しさん2016/02/07(日) 13:13:51.34ID:lvVeevWi
>>771
知らないんだけどExcel使う上でも違いってあるの?
0774デフォルトの名無しさん2016/02/07(日) 15:50:17.72ID:YehISXuU
俺もよく知らんけど色々あるみたいね
http://qiita.com/sjuny/items/d3bf8e4dd9e609374575
0775デフォルトの名無しさん2016/02/07(日) 16:04:51.64ID:Ah5srJ1t
こりゃMacでExcelVBAの仕事なんかきたら絶対拒否だな
まあ絶対こないけどな
0776デフォルトの名無しさん2016/02/07(日) 21:17:08.90ID:8jeH5Cxf
>>774
これは酷いな
文字化け起こすわ正規表現使えないわ
ScriptingDictionary使えないから
書き換えたいときはCollectionラッピングしてイテレート使えとか
しれっと言ってるけどVBAの知識しか持ってない奴には
何が何のことか分からないだろうしな

エラーは違うモジュールやクラスまたがるとスコープ外れることがあるから
WindowsのVBAでもRaiseに限らず気をつけるけど
.Netの参照もろくに使えないで、APIも貧弱だとしたらもう
何をどうしろと言うのだという感じになるだろうな。お手上げだ。
0777デフォルトの名無しさん2016/02/08(月) 08:35:37.46ID:74LZCTzt
>>776
テメェの会社のソフトウェアすらまともにポーティング出来ないってのも
笑えるなww 今時、マルチプラットフォームなんて当たり前の時代に。
0778デフォルトの名無しさん2016/02/08(月) 12:16:06.90ID:9AywMO4K
FormにコードからCheckboxやLabelやらCommandButtonを貼り付けたいんです。(数が決まっていないから)
そのときLayoutをAndroid開発のように手軽にする方法ってないものなのですか?
現状ではいちいち各要素のLeftプロパティやTo@プロバティやWidthプロパティをわざわざ計算して代入していますが。
0779デフォルトの名無しさん2016/02/09(火) 02:12:59.07ID:fm/+Qtdn
>>778
EXCELVBAからWindowsPhoneにプラットフォームを変える
07807782016/02/09(火) 10:27:16.61ID:kyiA5+yG
>>779
あまりわたしを怒らせないほうがいいぞ。
しばらくこのスレに住みつくんだからな。
0781デフォルトの名無しさん2016/02/09(火) 11:33:24.91ID:6l1mZ7CB
>>780
コテ付けておいてくださいね?
0782デフォルトの名無しさん2016/02/09(火) 12:02:55.92ID:nKvXEyw2
ファイル名とセル内の何桁目までが一致したものをハイパーリンクをつけたいのですがどのような構文を書けばよいでしょうか?
0783デフォルトの名無しさん2016/02/09(火) 13:36:12.19ID:nKvXEyw2
書き方が酷かった。
ファイル名とセル名で特定の場所が一致していた場合そのファイルとセルを紐付けるハイパーリンクを挿入するにはどのような構文が必要でしょうか?

例 abc0001xxxx.pdfというファイル名のファイルとセルがあった場合に
abcとxxxxは参照せずに
0001の部分と .pdfの拡張子のみで判別して合致したものにハイパーリンクで紐付けする。
0784デフォルトの名無しさん2016/02/09(火) 13:42:51.44ID:f4xX8fNK
>>783
ファイル名の集合は検索前に固定されてるの?
0785デフォルトの名無しさん2016/02/09(火) 13:55:54.83ID:nKvXEyw2
>>784
ファイル名は法則はあるけど全部が完全な固定じゃなくて100 -(ハイフン)の後ろ3桁とかで検索したい。

ファイル名の構成は
(特定のものだけいれる単語)(分類別の文字2桁)200-(固有の番号)(分類別の文字2〜3桁.pdf)
って感じ。
200-(ハイフン)は固定
0786デフォルトの名無しさん2016/02/09(火) 14:23:18.20ID:nKvXEyw2
というよりは改稿するたびにファイル名の後ろの数字が変わるからそれ以外で判断してハイパーリンクを付けたい.. .
0787デフォルトの名無しさん2016/02/09(火) 14:58:50.32ID:6l1mZ7CB
JavaScript並に、配列の扱いが楽になったらいいのに

VBAが最近嫌になってきたわ。
0788デフォルトの名無しさん2016/02/09(火) 14:58:58.23ID:f4xX8fNK
>>785
そういう文字列のパターンに合致したもの全部にリンクを貼るの?
それとも実際存在しているファイル名かどうかも考慮するの?
0789デフォルトの名無しさん2016/02/09(火) 15:06:16.15ID:j0ZWcdvL
>>787
どう違うのか教えて
0790デフォルトの名無しさん2016/02/09(火) 15:19:03.63ID:nKvXEyw2
>>788
ファイル名に固有の数字を持ってるから1つしか一致しない。

セル内の固有数字と同じものが存在しない場合っていうのは基本的にあり得ないけど存在しなかったらリンクしないでほしい
0791デフォルトの名無しさん2016/02/09(火) 17:30:49.91ID:FJrhS/CA
Excel2013です。

実行中のマクロが、
エラーメッセージや中断ダイアログも何も出ずに、
途中で終了してしまうことがあります。

多数の重いブック(大きなもので30M)を、
 開いて→シートのデータを取得して→上書きせずに閉じて、
を繰り返す処理ですが、
実行中に他のアプリケーションを使って作業などしていると
この現象が発生するようです。
(但し、作業の重い軽いに必ずしも関係ない様で、起きない時には狙っても起きません。)

今の所、
参照したいブックをオープンしたところで
何のダイアログも出ずに終了しているのを確認しています。

尚、
ブックのオープン・クローズのメソッドの前後のほか、
あちこちにDoEventを配置してます。


色々探したのですが、関連記事が見つかりませんでした。
何かお知恵を拝借出来れば幸いです。
宜しくお願いします。
0792デフォルトの名無しさん2016/02/09(火) 17:34:59.79ID:fCLnUzKj
下記のコードをWin8.1 Excel2013 IE11で実行すると
表示待機(2度目)で無限ループになります。
(なぜかIEのReadyStateは1のまま、LocationNameはYahoo! JAPANのまま)
原因と根本的な対処法を教えてください。

ちなみに以下の場合はなぜか無限ループしません。
・Vista Excel2007 IE9で実行した場合
・ステップインで実行した場合
・Google表示の前にExcelを最前面にした場合(コメントアウト部分の処理です)
・IEのVisibleをFalseのまま実行した場合
■ このスレッドは過去ログ倉庫に格納されています