[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 06/03 13:58 / Filesize : 194 KB / Number-of Response : 612
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA 質問スレ Part33



1 名前:デフォルトの名無しさん mailto:sage [2013/10/17(木) 22:04:40.64 ]
ExcelのVBAに関する質問スレです

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

前スレ
Excel VBA 質問スレ Part32
toro.2ch.net/test/read.cgi/tech/1381151717/

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

コードが嫌な人はこちらのスレへ
toro.2ch.net/test/read.cgi/tech/1381151995/l50

237 名前:デフォルトの名無しさん mailto:sage [2014/01/27(月) 22:17:46.82 ]
i = 1
kannsuu1 = Worksheets("Sheet1").Cells(i, 1)
kannsuu2 = Worksheets("Sheet1").Cells(i + 1, 1)

Do Until kannsuu1 <> kannsuu2

i = i + 1
kannsuu1 = Worksheets("Sheet1").Cells(i, 1)
kannsuu2 = Worksheets("Sheet1").Cells(i + 1, 1)

Loop

上記のようであれば完走するのですが i = i + 1 の下2行を削除すると動かなくなってしまいます
マクロの動きとしては Do Until でkannsuu1,2を呼び出すだけではダメで、必要であるごとにkannsuu1 =
などと一度呼びだしてiの値を反映させなければいけないのでしょうか?
多分ものすごく馬鹿なことを聞いてるのだと思いますが、さしつかえなければヒントだけでもご教示ください

238 名前:デフォルトの名無しさん mailto:sage [2014/01/27(月) 23:07:45.25 ]
>>237
そのプログラムが正しいとすると、kannsuu1もkannsuu2も関数じゃなくて変数
名前をkannsuuにしても関数にはならない

239 名前:デフォルトの名無しさん mailto:sage [2014/01/28(火) 01:37:20.21 ]
>>237
>>238の言うとおり、kannsuu1やkannsuu2はセルの値を入れる「変数」。
変数っていうのはプログラマの意図に反して勝手に中身の値が変わられると困る
(そもそもある値を一時的に保持しておく目的で変数というものが存在する)ので、
プログラム的に指示がない限り、勝手に中身が書き換わることは普通はない。

なのでそのコードは、A列のi行目と(i+1)行目のセルの値が一致する箇所を発見するまで
A列を上から下へ走査するという目的のコードであるなら、
間違いではない(最善ではないかも知れない)。

むしろ6、7行目を消そうとする理由が知りたい。

240 名前:デフォルトの名無しさん mailto:sage [2014/01/28(火) 01:54:30.04 ]
>>237
i = 1
k1 = 0
k2 = 0
while k1 = k2
..k1 = cells(i+0,1)
..k2 = cells(i+1,1)
..i + 1
loop

または

i = 1
while cells(i+0,1) = cells(i+1,1)
..i + 1
loop
debug.print cells(i+0,1), cells(i+1,1)

241 名前:デフォルトの名無しさん mailto:sage [2014/02/04(火) 21:02:33.55 ]
win 7 excel 2013なんですけど、
配列の数を取得するにはどうすればいいんでしょうか
UBoundって入力しても補完で出てこないし、
オブジェクトブラウザーで調べてみても存在していないんですが

242 名前:デフォルトの名無しさん [2014/02/04(火) 21:53:17.23 ]
>>241
HELP参照するか、ググルと沢山有る

243 名前:デフォルトの名無しさん mailto:sage [2014/02/04(火) 22:49:10.29 ]
教えてくれんのですか
ググり力を鍛えなければなぁ

244 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 01:40:01.47 ]
office2013のリファレンスみたけどUBoundはあった
でも、やっぱ俺の環境にはUBoundねーぞ
UCaseはあんのにどういうこっちゃ

245 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 03:55:50.64 ]
うちの2007でもUBound,LBoundは補完されないな
オブジェクトブラウザにもみつからない

でも普通に使えるしヘルプはF1で参照できる
WordやACCESSでも同じだったから、VBEの問題かもね



246 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 05:28:39.22 ]
2010でもUbound補完されない
けど気にせず入力しちゃえば普通に使える

247 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 20:25:50.87 ]
使えました!
補完出ないとかありえなくないですかw?

248 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 20:37:29.17 ]
ところで、VBA初めてなんですが、
Javaでいうリスナーを動的に設定するには何かいい方法ありますか?

text_ChangeAfter みたいなところに記述するのは、
数が増えると大変なので
エクセルテーブルにコンポーネントとそれに対する処理方法を記載しておいて、
例えば、郵便番号textには郵便番号処理(4桁目に-を挿入)をやらせるとかしたいです

249 名前:デフォルトの名無しさん [2014/02/05(水) 20:37:50.41 ]
他にも補完が効かないものもあるからなぁ datediffとか
まだ他にもあるんかな

250 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 20:57:01.65 ]
>>246 UBoundは「関数」でなく「構文」だ。文字の色を見ろ。

>>248
Excelでコードを半自動生成すると捗る。
 Private Sub TextBox5_Change(): Call 処理8(TextBox5): End Sub
 Private Sub TextBox6_Change(): Call 処理3(TextBox6): End Sub

251 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 21:16:07.29 ]
>>250
大変興味深いです

でも、それはやっぱり
TextBox5_Changeメソッドに記述するという方法になってしまいますか?

252 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 22:30:17.57 ]
テキストボックスに入力した文字列をシート内から検索できるようなVBAをWEBで見つけました。

(テキスト入力→ボタンを押す→検索される)

Sub ボタン1_Click()
On Error GoTo エラー処理 '検索文字が見つからなかったときはエラー処理へジャンプ
Cells.Find(What:=TextBox1.Value, LookAt:=xlPart).Activate'シート全体を対象に検索
TextBox1.Value = "" 'テキストボックスの入力文字を消去
Exit Sub '検索文字が発見できた場合はここで終了
エラー処理:
MsgBox "見つかりませんでした"
TextBox1.Value = ""
End Sub

この場合、同じ文字列が複数有る場合、2つめ以降が検索できません。
2つめ以降を検索できるようにするにはどうすれば良いでしょうか?

253 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 22:38:15.96 ]
あまりオススメしないけど、
「WithEventsを使用してコントロールのイベントを受け取って、
 別オブジェクトのActionPerformedメソッド?を呼び出す」
クラスを作りまくる方法もある

254 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 23:04:34.06 ]
>>253
ありがとうございます
まさにそれらしい記事を発見いたしました
ateitexe.com/excelvba-control-change-event/

家にexcelがないのですが、会社で試してみたいと思います

それと、textboxのプロパティで郵便番号ならIMEを半角数字限定
住所なら全角ひらがなとか設定できたと思いますが
それをテンプレートとして保存するような機能はありますでしょうか?

プロパティのこことここを直して〜だと設定ミスが出るので、
テンプレから反映できたらなぁと
これもテーブルに定義してもいいのですが

255 名前:デフォルトの名無しさん mailto:sage [2014/02/06(木) 00:21:03.25 ]
>>252
>Cells.Find(What:=TextBox1.Value, LookAt:=xlPart).Activate

どの位置から検索するかを引数に与えることができたはずだから、
変数を用意して位置情報を扱うように改造すれば、連続して検索出来るよ
その際、検索処理をWhile Loop内にするのが一般的だと思う



256 名前:デフォルトの名無しさん mailto:sage [2014/02/06(木) 00:23:20.25 ]
>>254
VBAスレだから、その、作ればいいと思うよ

257 名前:デフォルトの名無しさん mailto:sage [2014/02/06(木) 01:01:49.69 ]
>>250
すくなくとも、ヘルプにはUBound「関数」とかいてあるわけですが
入力補完はしないくせに、uboundと書くとちゃんとUBoundにしてくれるんだな

258 名前:デフォルトの名無しさん mailto:sage [2014/02/06(木) 01:30:45.07 ]
>>250
msdnにもUBound Functionて書いてあるよ
msdn.microsoft.com/en-us/library/gg278658(v=office.14).aspx

259 名前:デフォルトの名無しさん mailto:sage [2014/02/06(木) 01:31:48.95 ]
リンク失敗
msdn.microsoft.com/en-us/library/gg278658%28v=office.14%29.aspx

260 名前:デフォルトの名無しさん mailto:sage [2014/02/08(土) 01:24:05.94 ]
Javaやってたから継承とかできないとかクソとか思ってたけど、
variantとかめっちゃ便利やった

261 名前:デフォルトの名無しさん mailto:sage [2014/02/08(土) 01:36:34.71 ]
VBとかVBAはオブジェクト指向言語ではないが
オブジェクト指向言語のいいとこ取りはしてるってこと

262 名前:デフォルトの名無しさん mailto:sage [2014/02/09(日) 02:17:26.39 ]
継承とかできないとかクソとか言ってる奴は、まだまだ「言語に使われてる」レベル

継承出にないよりは出来た方が良いって話なら当然のことだけど
出来ないなら出来ないなりに使いこなせる奴が、「言語を使ってる」奴だ

263 名前:デフォルトの名無しさん mailto:sage [2014/02/09(日) 05:10:14.13 ]
とは言えやっぱり使えるにこしたことはないよ。
昔のアセンブラなんかは掛算や割算も自前でロジックを組まなければならない時も
あったけど、今そんなの嫌でしょ?
例えば配列の中の値をソートしたいとして、それが出来るメソッドが最初から有ったとき、
わざわざ自前で作る必要はないよね?
そのロジックの仕組みを知ってて使うのと、知らないで使うのも違うけど、
そのロジックの仕組みを知ってても、そう言った便利機能を使えるのと使えないのではやっぱり違うよ。

264 名前:デフォルトの名無しさん mailto:sage [2014/02/09(日) 10:56:14.31 ]
>>262
> 継承とかできないとかクソとか言ってる奴



> 出来ないなら出来ないなりに使いこなせる奴

は、別に排他じゃないだろ。
バカなの?

265 名前:デフォルトの名無しさん mailto:sage [2014/02/09(日) 10:58:13.72 ]
ソートも凝った条件付けようとしたら、結局自作になるから
組込機能頼りってのも、良いことばかりではないけどね

例えば
数値の1〜3と、英大文字のA〜Cと、英小文字のa〜cをソートした場合、Excelの並べ替えだと
「1,2,3,a,A,b,B,c,C」だが、
「1,2,3,A,B,C,a,b,c」にしたい場合や
「A,B,C,a,b,c,1,2,3」にしたい場合や
「1,2,3,a,b,c,A,B,C」にしたい場合とかもある

また数値だと
「7,8,9,40,50,60,100,200,300」だが、文字列数字だと
「100,200,300,40,50,60,7,8,9」になるので、文字列でも数値への変換無しに、
数値と同じ並べ替えをしたい場合や、逆に数値を文字列数字の順にしたい場合もある

便利なモノほど利用者をバカにすると言われてるわけで、
もちろん便利じゃないものを使いこなせる能力を持った上で、
便利なものを有効活用して工数を減らすのは良いが
便利なものに頼りきりになってしまうのも、問題と言えば問題だな



266 名前:デフォルトの名無しさん mailto:sage [2014/02/09(日) 13:59:41.61 ]
>>265
大体は同意だけど、

>便利なモノほど利用者をバカにすると言われてるわけで、

これは少し違うと思う。
便利なものが有った場合、今度はそれをいかに有効活用するかということと、
自分で考えて作った方がいいかの選択肢が出てくる。
上のような例の場合、本来の項目を変えずに別項目を作って、
そこに前0で埋めたり、大文字変換した値を用意してソートすれば事足りる。
それもダメだというならそう言うLinqとラムダ式で組めばいい。
視点が変わるのと、出来ることが増えることによって夢がひろがりんぐになるわけだ。

267 名前:デフォルトの名無しさん mailto:sage [2014/02/09(日) 14:13:43.52 ]
解ってないのか

268 名前:デフォルトの名無しさん mailto:sage [2014/02/09(日) 19:53:17.21 ]
解らなくてもいい
理解しろ

269 名前:デフォルトの名無しさん mailto:sage [2014/02/10(月) 00:39:22.03 ]
>>265
そう思うんなら中間言語使って頭鍛えなよ。
そんなのの成り立ち一々全部理解しなきゃいけないなら
VBAでだってまともに組めないよ。

270 名前:デフォルトの名無しさん mailto:sage [2014/02/10(月) 10:47:10.65 ]
>>265
便利なものが人をバカにするんじゃなくて
便利なものに頼りきる人はもともとバカだっただけ

271 名前:デフォルトの名無しさん mailto:sage [2014/02/10(月) 15:31:20.21 ]
>>265
それはExcelのソートのインターフェースが糞なだけ。
まともな言語ならラムダ式とかで比較を書ける。
クイックソートとかをいちいち真面目に実装するのは面倒だろ。

272 名前:デフォルトの名無しさん mailto:sage [2014/02/10(月) 17:52:51.32 ]
20年前に仕様が固まったBasic言語に文句言う奴

273 名前:デフォルトの名無しさん mailto:sage [2014/02/10(月) 21:17:25.11 ]
>>271
Javaってラムダ式あったっけ?

274 名前:デフォルトの名無しさん mailto:sage [2014/02/10(月) 22:12:34.15 ]
>>273
Java8で導入とか何とか。

275 名前:デフォルトの名無しさん mailto:sage [2014/02/10(月) 22:59:24.35 ]
>>272
Basicと言う観点から見れば仕様が固まるなんてことはないよ。
時代に合わせてる常に仕様は変わる。
VBAがたまたまVB6.0辺りの仕様で停滞してるだけ。
もっと前のN-Basic辺りは
Console 0,25,0,1とかおまじないのようにみんな付けてたけど、
VBAから入った人にしてみれば何のこっちゃってことになる。



276 名前:デフォルトの名無しさん mailto:sage [2014/02/11(火) 08:44:06.43 ]
便利なことって言うより新しいことに頭がついていけないじじいなんだろ

277 名前:デフォルトの名無しさん mailto:sage [2014/02/11(火) 10:11:19.84 ]
Excelでもバージョンアップのたびに関数がどんどん追加されてるけど
古いシステムでも修正なしで動くように新しい機能をわざと使わないことならある

278 名前:デフォルトの名無しさん mailto:sage [2014/02/11(火) 11:13:16.08 ]
windows xpとoffice2003廃止に伴い、
もうバージョン違いに悩まないで良くなるのかなあ。

279 名前:デフォルトの名無しさん mailto:sage [2014/02/11(火) 12:02:07.37 ]
古いのがなくなるのとバージョンアップは無関係だろ
これからもどんどん新機能が追加されてくに決まってる

280 名前:デフォルトの名無しさん mailto:sage [2014/02/11(火) 14:29:28.14 ]
未だにOffice2000使ってますが、特に問題ないです。

281 名前:デフォルトの名無しさん [2014/02/11(火) 23:00:10.06 ]
特定のセルに入力がないと空欄になるようにif関数が入力してあるんですが、
空欄のセルだけ非表示にできるようにはどうマクロを組めばよいのでしょうか。
数式が入っていなければ非表示にできるようには組めるのですが、
見た目上は空欄でもセルには数式が入力されているため上手くできません…。
どうかご教授ください。

282 名前:デフォルトの名無しさん mailto:sage [2014/02/11(火) 23:05:27.59 ]
>>281
セルの非表示ってどうやってやってるの?

283 名前:デフォルトの名無しさん [2014/02/11(火) 23:41:26.34 ]
>>282
セルではなく行の非表示でした。
例えばa1からa10に入力がない場合ですが、
If [Counta(a1:a10)] < 11 Then
Range("a1:a10").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
End If
で処理をしています。
ですがこれだと関数で空欄になっていてもセルには数式が入っているので、
非表示にはならないので困っています。

284 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 07:33:54.19 ]
>>283
ちょっと思い出せないけどxlCellTypeBlanks以外に何かなかったっけ?
ないなら判定を自分で作ればいいかと

285 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 10:47:06.24 ]
普通にValueとかTextプロパティを見ればいいだけでは



286 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 12:30:57.75 ]
>>283
For Each c In Range("a1:a10")
  If c.Text = "" Then Rows(c.Row).Hidden = True
Next

287 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 14:37:20.00 ]
CountBlankでいいんじゃないか

288 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 14:40:01.25 ]
>>286
それだと1個でも空白セルがあったら非表示になるんじゃ

289 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 16:22:45.01 ]
>>288
For Each でA1:A10内の各セルを一個ずつ選んで
そのセルのテキストが""だったらセルの行全部を削除する

これは>>283の要求どおりの動作だと思う

290 名前:289 mailto:sage [2014/02/12(水) 16:25:01.52 ]
ごめん、書き間違えた
削除じゃなく非表示だった

291 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 17:49:50.09 ]
>>289
ああ、行単位でコントロールするのか
If [Counta(a1:a10)] < 11 Then しか見てなかったわ

292 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 19:19:18.29 ]
そもそも最初のIfって必要か?
1行も消さない場合のがよっぽど多くないと、このロジックだとむしろナノ秒単位で遅くなるだろ

293 名前:283 mailto:sage [2014/02/12(水) 19:43:37.89 ]
>>286
このマクロで思った通りの処理をしてくれました、ありがとうございます。
ですが思ったよりも処理に時間がかかってしまうようです...。

レスを下さった方々ありがとうございます!

294 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 19:47:46.74 ]
>>293
まとめて処理すればいいよ
もらったコードに手を加えちゃダメってわけじゃないんでしょ?

295 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 19:56:10.39 ]
>>293
えっ調べるのはA列だけでいいの?だとしたら>>283のコードはなんだったのか…
遅いと感じるならScreenUpdatingを入れればたぶん一瞬で終わるよ



296 名前:283 mailto:sage [2014/02/12(水) 20:26:25.50 ]
マクロを断片的に覚えているので質問や発言がチグハグになってしまい申し訳ありません…。
レスくださった方のものを参考にさせていただいて自分で再度考えてみます。

ご迷惑おかけしました、ROMに戻ります。

297 名前:デフォルトの名無しさん mailto:sage [2014/02/14(金) 03:55:36.59 ]
エクセルは2000、VBAは6.0です。

ウェブの某サイトに自動ログインするマクロを作っています。
IDとパスワードはうまく入力させることができたのですが、
ログインができません。

ログインボタンが次のようなソースコードのサイトに
ログインするにはどうしたら良いでしょうか?


<input type="hidden" name="SsLoginPage" value="/members/" id="hidden1">
<input type="hidden" value=" ログイン " id="submit1" name="submit1">
<input type="image" src="../../ssl_img/login/btn_login.gif" alt="ログイン" tabindex="300" id=image1 name=image1>

298 名前:デフォルトの名無しさん mailto:sage [2014/02/14(金) 19:01:26.24 ]
>>297
スレ違い

299 名前:デフォルトの名無しさん mailto:sage [2014/02/14(金) 21:24:22.54 ]
>>297
できてるところまでソース貼って

300 名前:デフォルトの名無しさん mailto:sage [2014/02/14(金) 22:46:45.67 ]
>>299
サイトは伏せさせてもらっていいでしょうか? ネットで調べて無理矢理作ったので洗練されてません。

Sub 自動ログイン()
Dim obj As Object

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.Navigate "https://《ログインしたいサイト》"
Do Until objIE.Busy = False
Do Until objIE.ReadyState = 4
Do Until objIE.Busy = False
DoEvents
Loop
Loop
Loop

CreateObject("WScript.Shell").AppActivate "《ログインしたいサイトのタイトル》"
Set objU = objIE.document.getElementsByName("SsLogonUser")
If objU.Length = 0 Then
MsgBox "ログインページが変わった?"
WScript.Quit
End If

objU(0).Value = "《ID番号はここ》"
Set objU = Nothing

objIE.document.getElementsByName("SsLogonPassword").Item(0).Value = "《パスワードはここ》"
Set objU = Nothing

'このあと、ログインできるようにしたいのですが…
End Sub

301 名前:デフォルトの名無しさん mailto:sage [2014/02/15(土) 11:58:56.47 ]
質問です
ExcelシートにユーザフォームでDTPickerを貼り付けて、日付をこのカレンダーで
選択すると、フォームがある位置の陰になっているセルにこっそり日付格納して
マクロでその日付を使うように作成しました。
ところがこのカレンダーが動く人と動かない人がいて困っています。
(クリックしてもユーザフォームが固定された状態でカレンダーが表示されない)

環境はExcel2010で作成および表示
拡張子は会社の方針で互換重視のxls(関連会社とのファイル共有などのため)
どうもExcel2000でファイルを開くと動くというのも確認されていて、意味不明です。
インスコされている環境も社内標準環境なので、ランタイムが異なるなど無いはず
なんですが…

解決策の心当たりがあればよろしくお願いします。

302 名前:デフォルトの名無しさん mailto:sage [2014/02/15(土) 13:34:19.94 ]
>>301
ここにアクセスがインストールされてないとどうたらとか
アクセスが無くてもVBランタイムが入ってれば動くけど
それをエクセルで使うのはライセンス違反がどうたらとか色々書いてある

www.h3.dion.ne.jp/~sakatsu/Excel_Tips06.htm

303 名前:デフォルトの名無しさん mailto:sage [2014/02/15(土) NY:AN:NY.AN ]
>>302
kojikoji75.hatenablog.com/entry/2013/08/17/175328
の Date and Time Picker Control を使っているのでライセンス等は大丈夫なはずです
よく見るとAxtiveXコントロールとあるので
www.ilovex.co.jp/blog/system/cat820/excelactivex.html
と同じ罠に引っかかってるかもです(症状が良く似ている印象)

とりあえず月曜会社で試してみますが、これで解決しなかったら本格的に分からないw

304 名前:302 mailto:sage [2014/02/15(土) 14:44:20.37 ]
>>303
その Date and Time Picker Control てのは2007から実装されたんでしょ?
それだと>>301で言ってた「2000で動く」ってのはおかしくない?

305 名前:301 mailto:sage [2014/02/15(土) 15:10:33.32 ]
>>302
言われてみると確かにおかしいですね
でも2kで「動いた」って目の前で見せられたので…

昨日発覚したばかりなので、月曜改めて周囲の状況も含め確認してきます。



306 名前:デフォルトの名無しさん mailto:sage [2014/02/15(土) 17:36:08.31 ]
2000と2007って同時にインストールできるんじゃまいか

307 名前:デフォルトの名無しさん [2014/02/17(月) 21:49:42.74 ]
質問です。長いので二つに分けて質問させてください
Sub 総計計算_送料()
Dim 行番号 As Currency
Dim 工場直送送料 As Currency
Dim 受注生産送料 As Currency
Dim 送料合計 As Currency
行番号 = 14
送料合計 = 0
工場直送送料 = 500
受注生産送料 = 800
Do Until Cells(行番号, 4) = ""
If Cells(行番号, 6) = "工場直送" Then
送料合計 = 送料合計 + 工場直送送料
ElseIf Cells(行番号, 6) = "受注生産" Then
送料合計 = 送料合計 + 受注生産送料

308 名前:デフォルトの名無しさん mailto:sage [2014/02/17(月) 21:54:21.14 ]
上記のような構文の場合、
例えば
送料合計 = 送料合計 + 工場直送送料は
0 = 0 + 500
と、工場直送送料は「500」として計算されると思うのですが
Do Until Cells(行番号, 4) や If Cells(行番号, 6)といった式の場合
なぜいきなり(14 , 4)セルや(14 , 6)セルといったセルに飛ばずに、
ちゃんと一行目のセルから計算されるのかわかりません。
本当に初心者でアホな質問だと思うのですが、答えて欲しいです。

309 名前:デフォルトの名無しさん mailto:sage [2014/02/17(月) 22:18:32.41 ]
>>307のプログラムが途中で切れてるから推測だけど単純な入力ミスしてる

310 名前:デフォルトの名無しさん mailto:sage [2014/02/17(月) 22:26:13.83 ]
>>308
ステップ実行で1行ごとに各変数の値を確認してみたら?

311 名前:デフォルトの名無しさん mailto:sage [2014/02/18(火) 03:36:11.85 ]
むしろ1行目から計算されているというのが勘違いじゃないのか

312 名前:デフォルトの名無しさん mailto:sage [2014/02/18(火) 07:28:15.08 ]
行番号にCurrencyを使うな気持ち悪い

313 名前:デフォルトの名無しさん mailto:sage [2014/02/18(火) 11:22:50.43 ]
タシカニ

314 名前:デフォルトの名無しさん mailto:sage [2014/02/18(火) 14:32:12.07 ]
だな。
IntegerじゃないぞLong使えよ

315 名前:297 mailto:sage [2014/02/19(水) 01:25:10.63 ]
>>300誰か分からないでしょうか…?



316 名前:デフォルトの名無しさん mailto:sage [2014/02/19(水) 12:30:10.58 ]
>>315
残念ながらわかりません
ごめんなさい

317 名前:デフォルトの名無しさん mailto:sage [2014/02/19(水) 13:51:27.51 ]
>>315
ログインボタンのクリックは
objIE.document.all.btn01.Click
みたいに書く
ページ内にクリックできる場所が複数ある時はボタン番号を適切に変える
「戻る」「入力内容をクリア」「IDをクッキーに保存」とか色々と並んでる場合があるからね

ていうか検索ぐらいしろよ
「VBA IE操作 クリック」みたいなキーワードでサンプルがいくらでも出てくるぞ

318 名前:デフォルトの名無しさん mailto:sage [2014/02/19(水) 21:09:16.21 ]
=IFERROR(HYPERLINK(VLOOKUP(Cells(n1,5),$Q$2:$R$10,2,TRUE)),"")
上記を代入したいんですがうまくいきません。
n1は任意の変数です。Vlookupのところではねられます。

Worksheets("データシート").Cells(n1, 6).Formula = "=IfError(Hyperlink(VLookup(Cells(" & n1 & ", 5), $Q$:$R$10, 2, True)), "")"
考えてやってみましたがこれではダメっぽいです。
ご教授いただけると助かります。

319 名前:デフォルトの名無しさん mailto:sage [2014/02/19(水) 21:49:24.13 ]
>>318
Worksheets("データシート").Cells(n1, 6).Formula = "=IfError(Hyperlink(VLookup(Cells(" & n1 & ", 5), $Q$:$R$10, 2, True)), """")"

とりあえずこんな感じ?

320 名前:319 mailto:sage [2014/02/19(水) 21:52:23.42 ]
>>318
ダブルクォーテーションをダブルクォーテーションで囲んだ中で使うときは
"" と2個続けるっていうルールになってるよ

321 名前:デフォルトの名無しさん mailto:sage [2014/02/19(水) 21:58:31.80 ]
>>318
Worksheets("データシート").Cells(n1, 6).Formula = "=IfError(Hyperlink(VLookup(Cells(" & n1 & ", 5), $Q$2:$R$10, 2, True)), """")"

322 名前:デフォルトの名無しさん mailto:sage [2014/02/20(木) 00:46:24.24 ]
>>317
それで番号をひと通り押してみたんですけど
どれもダメでした
>>297のソースコードでもボタン形式でいいのでしょうか?

>>316
丁寧にありがとうございます

323 名前:デフォルトの名無しさん mailto:sage [2014/02/20(木) 01:24:13.28 ]
>>322
よくわからんけどinputタグにname=image1って書いてあるからクリックするのもimage1と違う?

324 名前:デフォルトの名無しさん mailto:sage [2014/02/20(木) 01:55:37.89 ]
>>317
>>323
すげえええええええ
objIE.document.all.image1.Click
であっさり通りました

ありがとうございます

325 名前:デフォルトの名無しさん mailto:sage [2014/02/20(木) 07:29:20.69 ]
>>324
解決してよかったね
でもスレチなんだから今後は余所に行ってやってね



326 名前:デフォルトの名無しさん mailto:sage [2014/02/20(木) 09:03:39.96 ]
>>325
このスレでは問題ない
そういうことが気になるなら君が他所へ行きたまえ

327 名前:デフォルトの名無しさん [2014/02/20(木) 10:28:54.40 ]
>>326
ですよね

328 名前:デフォルトの名無しさん mailto:sage [2014/02/20(木) 19:00:31.77 ]
EXCELファイルを読み込んで、セルのデータを加工するプログラムを作って
いるのですが、文字列、数値、計算式などが入っている普通のファイルなら
期待通り動くのですが、EXCELは多機能ですので、普段全く使ったことが無い
ような機能とか設定がシートやセルなどに追加されていると、自作プログラム
が予期しない動きをするのではないかと思っています。
そのテストの為には、自分でEXCELファイルにいろんな加工を行えば良いわけですが、
自分でも知らないような機能は使うことができません。例えばデータベースとか
テーブルとか、グラフ、フィルターなどなど、まだまだ沢山あります。
そこで質問なのですが、そういうEXCELの機能がてんこ盛りみたいにいろいろ
組み込まれているような何か良いテスト用のファイルって、どこかにありませんか?

329 名前:デフォルトの名無しさん mailto:sage [2014/02/20(木) 19:21:36.25 ]
>>319,320,321

""が余計にいるとは知りませんでした。
おかげさまで解決・・・となればよかったんですが
なぜかVookupのあとがCellsだとうまく読み出ししてくれません。

ちゃんと =IFERROR(HYPERLINK(VLOOKUP(Cells(20, 5), $Q$2:$R$10, 2, TRUE)), "")とセルには入っています。
手動でCells(20,5)をE20にすると思った通りの動きになるんですが、なんででしょう?

330 名前:デフォルトの名無しさん [2014/02/20(木) 21:17:27.35 ]
>>329
ワークシートでは
Cellsが使えないからエラーになるんじゃないか?

331 名前:デフォルトの名無しさん mailto:sage [2014/02/20(木) 21:20:43.09 ]
>>329
そもそもワークシート関数にCellsなんて無いから

332 名前:デフォルトの名無しさん mailto:sage [2014/02/21(金) 04:14:19.51 ]
>>329
ワークシート上の数式にCellsは使えないけど、
VBAでは使えるからコード中でCells(20,5)を指定させる事なら出来た。
ただし、絶対参照になっちゃったけど。

Worksheets("データシート").Cells(n1, 6).Formula = "=IfError(Hyperlink(VLookup(" & Cells(20, 5).Address & ", $Q$2:$R$10, 2, True)), """")"

相対参照で書きたければFormulaではなくFormulaR1C1を使えば良いと思う。

333 名前:デフォルトの名無しさん mailto:sage [2014/02/21(金) 07:35:53.62 ]
>>328
あなたにプログラムを依頼した人にもらえばよいと思います

334 名前:デフォルトの名無しさん mailto:sage [2014/02/22(土) 01:34:21.73 ]
数式の中で参照のあるツールいじるのこえー

シートAのA1に名前A1とつけたとき
$A$1 = 名前A1なのかな?

=A1の相対参照で行列の挿入して参照がずれる
アンチパターンの整理ができてないわ

335 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 15:56:19.01 ]
ループ処理について質問ですが

Do Until 親 = 20 '20回ループ


   Do Until 子 = 10 '10回ループ
     '子くり返し処理内容
   子 = 子 + 1
   Loop


'親くり返し処理内容
親 = 親 + 1
Loop

このようにネストさせる事は可能なのでしょうか?
とりあえず作ってみたら動きませんでしたが出来ると説明されている解説サイトもあるようで
一体どうやって書けば良いのでしょうか?



336 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 16:27:41.93 ]
>>335
親の二回目のループで 子 の内容どうなってる?

337 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 16:31:18.92 ]
親も子もゼロに初期化しないといけないんじゃね?

338 名前:335 mailto:sage [2014/02/23(日) 16:32:17.71 ]
>>336
親の計算結果の数値を子に渡して詳細分析を10パターン行うと言ったないようですが
これってプロシージャをわければ解決でしょうか? そんな気がしてきました。

339 名前:335 mailto:sage [2014/02/23(日) 16:34:27.48 ]
>>337
初期化定義はつけてあります。

340 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 16:52:35.73 ]
>>338-339
ごたくはいいから >>336 を確認しろよ

341 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 17:15:19.70 ]
>>335
わからないならコードを削らず貼ろう

342 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 17:45:19.18 ]
>>340
>>341
チェックしたところ子のループ処理が終了したところでVBAの実行が終了いるようで、、 やはりネストは無理か??

343 名前:デフォルトの名無しさん [2014/02/23(日) 17:53:58.08 ]
>>342
ネスト自体はできるよね。
コード見直したがいいっすよ。

Dim Parent As Long
Parent = 0

Do Until Parent = 20
 Dim Child As Long
 Child = 0

 Do Until Child = 10
  Debug.Print Parent & " " & Child
  Child = Child + 1
 Loop

 Parent = Parent + 1
Loop

344 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 17:54:51.09 ]
>>336
>>340
>>341
なるほど!!親処理1回ごとに子の変数を初期値に戻さないと子の処理がすべてスルーされているわけですね、修正するとばっちり動きました。
超初歩的な間違いでした。。どうもありがとうございました!

345 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 17:56:18.66 ]
>>343
ありがとうございますm(_ _)m



346 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 18:03:05.91 ]
>>344
VBA は変数の初期値が決まってるからいいんだけど、こんなケースもあるから明示的に設定した方がいいよ。
あと、今回の場合なら For 〜 Next 使った方がいいと思う。

347 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 18:29:53.38 ]
>>346
どうしてですか?

348 名前:335 mailto:sage [2014/02/23(日) 18:33:31.05 ]
For 〜 Next  は使った事がありませんが勉強してみます。ありがとうございます。

349 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 19:26:51.74 ]
>>347
どこを質問してるんだよ...

350 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 21:43:02.28 ]
>>349
すみません
後半部分についてです

351 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 21:54:19.10 ]
ループの回数判ってんだろ?
実行時でないと判らないってんなら Do Unti
の方でないとダメだろうけど判ってんなら
For Nextの方が良いに決まってるl

352 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 21:57:31.13 ]
>>350
今回みたいな初期化漏れや Parent = Parent + 1 の入れ忘れがなくなるから。

353 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 22:04:00.80 ]
>>351-352
ありがとうございます
ヒューマンエラーを低減させるためにFor〜Nextの方が良い、ということだったのですね
ちょっと深読みしすぎていたようです

354 名前:デフォルトの名無しさん mailto:sage [2014/02/24(月) 20:49:02.56 ]
質問です。

複数のインスタンスでExcelが起動していて、それぞれのインスタンスに
未保存の新規ブックがひとつずつ開いています。
これらのブックは未保存のまま、すべてのブックのオブジェクトを取得する方法は
あるのでしょうか?

VBAでできるに越したことはないのですが、別の方法でもOKです。
よろしくお願いします。

355 名前:デフォルトの名無しさん mailto:sage [2014/02/25(火) 07:33:56.81 ]
>>354
インスタンスを生成したあと
コレクションに格納しておいて
ループでコレクションの中身を取得するようにしとけば?



356 名前:デフォルトの名無しさん mailto:sage [2014/02/25(火) 09:28:04.02 ]
excel2010

vbaの参照設定で一度フォームを使ったら
Microsoft Forms 2.0 Object Library
のチェックを外すこと出来なくなるん?

フォーム使ったら自動でチェックが入るけど、いらなくなったんで
フォームを解放してついでに参照設定のチェックをoffにしようとしたら
「使用中のコントロールまたは参照を削除することはできません。」
って出るんだけど

357 名前:デフォルトの名無しさん mailto:sage [2014/02/25(火) 11:01:09.75 ]
>>356
エクセル2000だけどおなじ症状が出てる

358 名前:デフォルトの名無しさん mailto:sage [2014/02/25(火) 15:26:49.43 ]
>>356-357
2007で試したけど、保存して開き直したら消えてる

359 名前:356 mailto:sage [2014/02/25(火) 17:00:57.86 ]
こっちは消えないなぁ??

ってか、参照設定を解除するのを教えてもらったんで、それで消しましたた^^;

Sub testRef()
Dim Ref As Object

For Each Ref In ThisWorkbook.VBProject.References
Debug.Print Ref.Name
If Ref.Name = "MSForms" Then
ThisWorkbook.VBProject.References.Remove Ref

End If

Next Ref

End Sub

360 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 13:49:18.84 ]
Microsoft、「Microsoft Office 2013 Service Pack 1」を公開
ttp://www.forest.impress.co.jp/docs/news/20140226_636988.html

361 名前:デフォルトの名無しさん [2014/02/27(木) 13:32:25.19 ]
Excel2007で
www.hatinosu.net/camp/archives/okinawa/
www.hatinosu.net/camp/archives/1200/
こういうページが複数あります (下のURL)
これをExcelの表にまとめてしたいと思っています
場所1 料金1 期間1 関連1 備考1
場所2 料金2 期間2 関連2 備考2
場所3 料金3 期間3 関連3 備考3
場所4 料金4 期間4 関連4 備考4
htmlで表を取り込む方法はわかったのですが
まとめてやる場合はマクロが必要なのでしょうか
参考になるサイトなどありましたらご教示ください

362 名前:デフォルトの名無しさん mailto:sage [2014/02/27(木) 14:21:41.96 ]
>>361
ホームページに書いてある内容から必要な部分だけ取り出す方法は色々あるけどVBAを使った方が楽だと思う

ただ、人間の目で必要な部分を探すのは簡単だけど、それをコンピューターに自動でやらせるのはものすごく大変
参考サイトを見た程度でできるような物じゃない

手順としては
(1) URLの一覧を作る
(2) HTMLを読み込む
(3) タグとテキストを解析して必要な情報を取り出す
(4) 取り出したデータをシートに並べる

どれも専門的な知識が必要なんで、どこまでわかっているのか細かく確認しながらじゃないと教えるのも大変

363 名前:デフォルトの名無しさん mailto:sage [2014/02/27(木) 14:24:27.05 ]
>>361
ホームページから情報を取り出してワークシートにコピーする例
www.happy2-island.com/excelsmile/smile03/capter00721.shtml

364 名前:デフォルトの名無しさん mailto:sage [2014/02/28(金) 00:02:45.20 ]
「表示されたGoogleの検索結果一覧から、一番最初の検索結果をクリックする」
という処理はどのようにすればよいでしょうか。

検索結果のページタイトル一覧は
ol#rso > li > div > h3.r > a……(結果毎にli繰り返し)となっていたので、
「ol id="rso"内の、一つ目のh3 class="r"をクリックする」という処理が
できればと思うのです。

i'mfeelingluckyに渡して取得していたのですが、一部直接飛べないものがあり、
このような処理をしたいと思いました。

365 名前:デフォルトの名無しさん mailto:sage [2014/02/28(金) 00:27:30.76 ]
>>364
クリックしなきゃいけないの?
aタグのURLをブラウザに直接渡せばいいじゃん
まあGoogleの場合はちょっと文字列の加工が必要だけど



366 名前:デフォルトの名無しさん [2014/02/28(金) 23:51:48.43 ]
ユーザーフォームを使って、名簿に入力しようとしましたが、上手くいきません。
デバックしてみると、アプリケーションまたはオブジェクト定義のエラーですと言われWith Cells(Rows.Count, 1).End(x1Up).Offset(1)の部分が黄色く反転しています。
どのように修正するとよいのでしょうか?また、今、シートは中1、中2、中3という名前のシートがあります。
ユーザーフォームで学年を中1を選択した場合には中1のシートに入力(中2、中3も同様に)する場合どのように修正すればよいか教えていただきませんか?

367 名前:デフォルトの名無しさん [2014/02/28(金) 23:55:12.51 ]
これがコードです。

Private Sub cmd終了_Click()
Unload Me
End Sub

Private Sub cmd登録_Click()
Dim RowNum As Long


With Cells(Rows.Count, 1).End(x1Up).Offset(1)
.Value = Text生年月日.Value
.Offset(, 1).Vulue = schoolyears.Value
.Offset(, 2).Vulue = Text氏名.Value
.Offset(, 3).Vulue = Textフリガナ.Value
.Offset(, 4).Vulue = Text中学.Value
.Offset(, 5).Vulue = Text郵便番号.Value
.Offset(, 6).Vulue = Text住所.Value
.Offset(, 7).Vulue = Text自宅tel.Value
.Offset(, 8).Vulue = Text生徒携帯.Value
.Offset(, 9).Vulue = Text生徒アドレス.Value
.Offset(, 10).Vulue = Text保護者氏名.Value
.Offset(, 11).Vulue = relations.Value
.Offset(, 12).Vulue = Text保護者携帯.Value
.Offset(, 13).Vulue = Text緊急連絡先.Value
.Offset(, 14).Vulue = Textメールアドレス.Value
.Offset(, 15).Vulue = Text備考ス.Value
End With
End Sub

368 名前:デフォルトの名無しさん [2014/02/28(金) 23:56:00.50 ]
Private Sub UserForm_Click()

End Sub

Private Sub UserForm_Initialize()

schoolyears.AddItem "中1"
schoolyears.AddItem "中2"
schoolyears.AddItem "中3"

relations.AddItem "父"
relations.AddItem "母"
relations.AddItem "その他"




End Sub

369 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 01:27:58.58 ]
>>366
○ XlUp
× X1Up

370 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 01:37:04.38 ]
デバック

371 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 01:56:54.39 ]
>>367
○ Value
× Vulue

372 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 01:58:05.73 ]
>>367
「備考ス」?

373 名前:366 [2014/03/01(土) 02:25:07.81 ]
>>369,>>371
すいません、英語が苦手なもので。

>>372
それは「備考ッス」のタイプミスです。

374 名前:sage [2014/03/01(土) 02:28:01.51 ]
>>369
ありがとうございます。初歩以前のミスしてしまいました。
>>370
すいません。
>>371
間違ったものをコピペしてしまったのが原因です(泣)ありがとうございます。
>>372
オブジェクト名確かに変ですね。備考に直しました。ありがとうございます。

375 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 02:32:30.20 ]
>>373
代わりに(?)フォローしていただきありがとうございます。



376 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 14:57:19.03 ]
>>365
レスありがとうございます。
現状、i’mfeelinglucky検索で取得ページ移動、表示されているページタイトルとURL取得、
としていたので、VBAもあまり慣れていないため、
クリック動作さえ加えれば問題なくなるかと思ったのですが、難しいものでしょうか。。。

377 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 16:44:08.18 ]
>>365
レスありがとうございます。
現状、i’mfeelinglucky検索で取得ページ移動、表示されているページタイトルとURL取得、
としていたので、VBAもあまり慣れていないため、
クリック動作さえ加えれば問題なくなるかと思ったのですが、難しいものでしょうか。。。

378 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 21:17:15.14 ]
漢字に振られているカタカナのふりがなを一気に平仮名に
変換する方法ありますか?出来ればブックの全シートを一気に。

379 名前:デフォルトの名無しさん [2014/03/01(土) 21:30:56.91 ]
StrConv

380 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 22:05:09.76 ]
>377

getElementById('rso').getElementsByTagName('a')[0].click
みたいなことVBAでできないのでしょうか。

それを聞いてるんだよと言うのならスマン。

381 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 22:58:29.98 ]
>>380
できるよ

382 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 18:09:03.96 ]
数十のセル範囲を選択してブック1からブック2へコピペする単純なコマンドを作ろうとしていますが

Workbooks("1.xls").Sheets("Sheet1").Range("a1":"z1").Value = Workbooks("2.xls").Worksheets("Sheet1").Range("a1":"z1").Value

このように書くと数値が極端な桁のマイナスになっていたりエラー値に変化しているセルが発生するのですが
元の数値のセルは =c1 =c2 ・・・といったような単純なセル参照の羅列で数値は小数点入りの正数で計算式やらセルの特殊指定は
一切はいってないので何故化ける箇所が発生するのか謎なのですが 原因は何なのでしょうか?
上記のコマンドに xlPasteValues 値を貼り付けの指定を追加するにはどう書けばいいのでしょうか?

383 名前:382 半分自己解決しました mailto:sage [2014/03/02(日) 18:54:41.58 ]
>>382
よく見直してみますと元セルの セルの書式設定- 表示形式- 数値 の箇所が
homepage3.nifty.com/gakuyu/excel/syosiki2_fig03.gif
小数点ありの負の数値で選ばれていました。
これが原因のようですお騒がせしました
全部が負の数値になっていたらすぐわかるのですがほとんどは正数のままで
所々負の数値に置き換わっているのは謎です

384 名前:デフォルトの名無しさん mailto:sage [2014/03/03(月) 07:39:32.84 ]
>>382
値の貼り付けでいいならVariant変数に入れてから貼り付けるのが簡単でいいと思う。
たとえば382の例なら

Dim v As Variant
v = Workbooks("2.xls").Worksheets("Sheet1").Range("a1":"z1")
Workbooks("1.xls").Sheets("Sheet1").Range("a1":"z1") = v

こんな感じ
こっちのほうが普通にコピーするより実行速度も速いらしい
ただし、コピーできるのは値のみ、書式とか数式とかは引き継がれない

385 名前:382 mailto:sage [2014/03/03(月) 20:27:40.83 ]
>>384
素晴らしいですね!的確な回答を頂きましてありがとうございます。助かりましたし勉強になりました。



386 名前:384 mailto:sage [2014/03/03(月) 22:19:34.69 ]
>>382
今更だけど、>>382の式はおかしいよ
ブック1("1.xls")からブック2("2.xls")にコピーするなら
「イコールの右」から「イコールの左」に代入するんだから

Workbooks("2.xls").Sheets("Sheet1").Range("a1":"z1").Value = Workbooks("1.xls").sheets("Sheet1").Range("a1":"z1").Value

だよ
>>382は式の右と左が逆)

387 名前:デフォルトの名無しさん mailto:sage [2014/03/03(月) 23:57:40.67 ]
>>384
それって>>382と同じだよ

388 名前:384 mailto:sage [2014/03/04(火) 00:20:39.61 ]
え、そうなの?
Variantに入れると速いってOfficeTANAKAに書いてあったけど

389 名前:デフォルトの名無しさん mailto:sage [2014/03/04(火) 07:29:55.48 ]
ネットに書いてあることはすべて真実です

390 名前:デフォルトの名無しさん [2014/03/04(火) 08:07:22.59 ]
>>389
>>387もOfficeTANAKAもどっちも「ネットに書いてあること」なんだが?

391 名前:デフォルトの名無しさん mailto:sage [2014/03/04(火) 08:25:07.77 ]
>>388
どこのページよ
URL 晒して

392 名前:デフォルトの名無しさん mailto:sage [2014/03/04(火) 12:53:57.87 ]
>>390
うん、それを皮肉ったつもりなんだけどわからなかった?

393 名前:デフォルトの名無しさん [2014/03/04(火) 20:15:07.96 ]
>>392
うん、それを分かってて茶化したつもりなんだけどわからなかった?

394 名前:デフォルトの名無しさん mailto:sage [2014/03/04(火) 21:51:23.58 ]
>>393
うん、さすがにそれは無理がありすぎてわからなかった

395 名前:デフォルトの名無しさん [2014/03/04(火) 22:07:20.57 ]
>>394
修行が足りない



396 名前:デフォルトの名無しさん mailto:sage [2014/03/05(水) 00:20:10.55 ]
>>388
そう同じ
だから速くはならん

397 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 00:13:33.22 ]
入力作業中の100メガぐらい有るブックを任意のタイミングで瞬間的にLAN接続された3台のPCで閲覧できるようにすることは可能でしょうか?
現在VBAで別名で保存した場合1回数十秒 LAN経由で開くと応答無しになるのでそれぞれのローカルへコピーして開くと又数十秒かかり
数台へ配布するのになんだかんだ数分ぐらい時間がかかっています。
閲覧側は見れれば何でも良いです。(Excelブック形式だと尚良い)

398 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 00:35:31.08 ]
>>397
不可能
大量のデータをLAN越しに同時に閲覧したい場合はAccessを使うのが普通

399 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 00:39:25.86 ]
>>397
数式がてんこ盛り盛りならVBAで全部コピーして値だけ張り付けて別名保存する、ぐらいかな
処理にどのくらいの時間がかかるかは知らんけど

数式がほとんどなくてデータだけで重いのなら画像に出力してPDF化かな

400 名前:397 mailto:sage [2014/03/10(月) 00:55:43.48 ]
>>398
>>399
無理っぽいのですね。ありがとうございます。
データてんこ盛りなのでアクセスやSQLなのでしょうかねぇ 使った事ありませんが、、

401 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 01:18:59.92 ]
普通の人は100メガの情報は一度にはみれない
ほんとにそのサイズでやり取りする必要があるのか良く考えた方がいいんじゃね

402 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 06:46:54.06 ]
>>397
ブックの共有じゃダメなの?
そもそも Excel で 100MB って言うのも色々危険な香りがするが...

403 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 06:57:20.42 ]
>>400
文字データだけならCSVで吐いて
閲覧者がブックを開いたら取り込むとかはどうよ

セル書式は予め設定しておいて、不足なら自動書式で
グラフも置いてあるなら範囲を名前定義にして取り込み時に名前定義をちょろっと修正すればいい

>>402
>LAN経由で開くと応答無しになる
に該当するんじゃないの?しないの?

404 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 07:46:59.95 ]
>>403
> に該当するんじゃないの?しないの?

共有ブックはもう少し賢いけど、正直 100MB クラスのブックを共有で使ったこと無いから試してみてくれとしか言いようがない。
共有特有のトラブルもあるし。

405 名前:デフォルトの名無しさん [2014/03/10(月) 22:22:30.84 ]
まー、あんまり無茶な使い方しない方が無難だよね



406 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 22:31:12.02 ]
画像貼りまくりでWORDみたいな使い方をしていると想像
せめてシートごとに分割したほうがいいと思うが
変な規定でもあるんだろう

407 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 22:42:00.56 ]
100MBのファイルコピーするのに数十秒かかるLANってすごいな
それを瞬間的に閲覧するようにできるExcelVBAって万能だな

408 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 10:45:11.04 ]
>>407
100Mbpsで理論値maxでも100MBをコピーするのに10秒程度かかる。
実効値20Mbps位だったらその5倍かかるわけで、100MBのコピーに2,30秒かかる環境があってもおかしくない。

409 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 20:16:20.38 ]
>>408
細かいことだけど100Mbpsなら8秒じゃないの?

410 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 21:30:20.38 ]
>>409
実測してみるとわかるけど、固定IPで他のネット機器をすべて切り離して回線が独占できる状態を作ってやっても
オーバーヘッドがあるから最高でも表示の8割〜9割ぐらいの速度になる

実用に使ってる環境だともっと遅くなる

411 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 21:44:28.36 ]
>>409
細かい事をいうなら
ネットワーク回線を流れてるのはデータだけじゃない
実データの1バイトが8ビットの情報として流れているとは限らない

412 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 21:47:49.12 ]
でも論理値maxでって言ってるじゃん

413 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 22:23:55.06 ]
理論値なんて一番速い時の値だから、無線 LAN なんて理論的にも絶対その値は出ないしな。

414 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 22:41:58.20 ]
理論値にはいろんな取り方があるからな
ファイル転送の理論値マックスは回線上の理論値マックスからいろんな層のオーバーヘッド分下がるのが当然

415 名前:デフォルトの名無しさん mailto:sage [2014/03/15(土) 18:19:11.62 ID:wdy6oLTC]
VBA初心者ですが
VBAの命令だけを書いた空のブックと、
分析したいデータが書かれたブックを分離して運用することは可能なのでしょうか?

現状データの書かれたブックが数十に同一処理をさすためにそれぞれにVBAを記述していますが
処理方法を変更する場合全ブックの同じVBAコードを書き換えていて手間がかかっています。
ならば空のVBAだけを書いたブックを1つ動かしておけば済むのではと思ったのですが
ここにいらっしゃるプロの方はどうされているのでしょうか?



416 名前:415 mailto:sage [2014/03/15(土) 18:22:17.82 ID:wdy6oLTC]
>>415
又、空のブックで運用ができるのであればよく使う命令を個別にモジュール化して連携やネストさせるような運用方法も可能なのでしょうか?
これができるとなるとデータの書かれているシートにVBAを書くのは大量のブックを処理する場合は非合理的かと思いましたがどうでしょうか?

417 名前:デフォルトの名無しさん mailto:sage [2014/03/15(土) 18:34:24.97 ID:IpiW3W82]
>>415
> 分離して運用することは可能なのでしょうか?

可能

Excel アドイン 作成 とかでググると幸せになれるかも

418 名前:415 mailto:sage [2014/03/15(土) 18:47:05.31 ID:46w16LKJ]
>>417
アドイン、、こんな便利な物があったのですね。ありがとうございます。
大幅な合理化が図れそうです

419 名前:デフォルトの名無しさん mailto:sage [2014/03/17(月) 04:12:41.18 ID:NI0yZz+J]
以前こちらでマクロを作っていただき、とても重宝して使わせていただいていたのですが
少し仕様の変更が出てきてしまったため、再度作成か手直しをしていただきたいのですが
お願いできますでしょうか。

以下のマクロで月初から月末の所を、月初から翌月の3日までにしたいのです。
どうか宜しくお願い致します。

420 名前:デフォルトの名無しさん mailto:sage [2014/03/17(月) 04:15:10.22 ID:NI0yZz+J]
Sub SheetCopy()

Dim firstDay As Date
Dim lastDay As Date
Dim targetDay As Date
On Error GoTo Error_Handler

With ThisWorkbook

'月初日を取得
firstDay = .Sheets("1日").Range("B1").Value
'月末日を取得
lastDay = DateSerial(Year(firstDay), Month(firstDay) + 1, 0)

421 名前:デフォルトの名無しさん mailto:sage [2014/03/17(月) 04:18:35.64 ID:NI0yZz+J]
'月初日のシートは既に存在しているので、
'先にシート名とシート色を設定してしまう。
'.Sheets(Sheet1.Name).Name = Format(.Sheets(Sheet1.Name).Range("B1").Value, "m月d日")
If Not .Sheets("祝日").Cells.Find(firstDay, LookAt:=xlWhole) Is Nothing Or _
Weekday(firstDay) = vbSunday Then
.Sheets("1日").Tab.ColorIndex = 3
End If

422 名前:デフォルトの名無しさん mailto:sage [2014/03/17(月) 13:25:21.94 ID:vj1XNX0y]
>>419-421
これコードの一部分だけだよね?
月末日を保持しているであろう変数"lastDay"をどこで使うのか分からないけど、
(ここに貼られている範囲では月末日を取得してるだけでそれを使用していない)

lastDay = DateSerial(Year(firstDay), Month(firstDay) + 1, 0)



lastDay = DateSerial(Year(firstDay), Month(firstDay) + 1, 3)

に変更するだけで翌月3日までにはなる。
ただし、それをどのように利用するのかはこのコード以外の部分に書いてあるので
単純にこれだけでそのコード全体が正常に(あなたの意図した通りに)動くかどうかは分からない。

423 名前:デフォルトの名無しさん mailto:sage [2014/03/17(月) 22:24:00.94 ID:iQzGYjkh]
>>422
やる気のないやつに解釈垂れても意味ないぞ。
そんな解釈より動くコードしか興味ないからコード書けって言ってるんだから。

424 名前:デフォルトの名無しさん mailto:sage [2014/03/17(月) 23:26:36.86 ID:vj1XNX0y]
>>423
いや、別にどんな相手でも良いっすよ
こっちが好き勝手に書いてるだけだし。

ところで、垂れるのは解釈じゃなくて講釈ですね。

425 名前:デフォルトの名無しさん mailto:sage [2014/03/18(火) 00:01:33.11 ID:YCsGrVX8]
すみません419です。
昨日はなぜかエラーが出たあと、バイさるになったまま書き込みができなくなり
続きのコードを貼る事が出来ませんでした。

このあとの続きのコードは、シート名の指定と日祝の色指定のコードになっているのですが
シート名を1日、2日、3日、となるように指定しているため、これだと翌月の3日分が重複してしまうためか
422さんの仰るMonth(firstDay) + 1, 3では、エラーになってしまい上手くいきませんでした。

要は、月初から翌月の3日までのシートを作りたく、その際、日祝を赤字にし
尚且つ各シートのB1セルに○月○日と表示したものを作りたいのですが
何か上手くいく方法はありますでしょうか。
よろしくお願い致します。



426 名前:422 mailto:sage [2014/03/18(火) 00:51:31.95 ID:Riw4xitA]
>>425
シート名に月も入れるとか翌月の3日分のシート名に翌月って付け加えるとか、
やりようはそれなりに有るんでないかい?

その程度の修正は元のコードさえ曝せば
このスレの人達なら簡単に出来るだろうけど、
肝心のコードが無けりゃ誰にもどうにもなんないよね。

ちなみに俺は寝るんで今日はもう出来ないです。

427 名前:デフォルトの名無しさん mailto:sage [2014/03/18(火) 01:11:58.51 ID:YCsGrVX8]
>>426
早速のレスありがとうございます!
修正でも新規に作成でも、作っていただけるのなら
どちらでも大変嬉しいのですが、一応続きのコードを晒しておきますので
お時間のある時に、どうか宜しくお願い致します!

因みにシート名は、1日、2日、3日、、、としたいため
翌月3日分は「翌月」と付け加える方向でお願いしたいと思います。

428 名前:デフォルトの名無しさん mailto:sage [2014/03/18(火) 01:13:33.38 ID:YCsGrVX8]
'ひと月分のシートをコピーし、
'シート名、シート色の設定を行う。
For targetDay = lastDay To firstDay + 1 Step -1
.Sheets("1日").Copy After:=Sheets("1日")
.ActiveSheet.Tab.ColorIndex = xlNone
.ActiveSheet.Range("B1").Value = targetDay
.ActiveSheet.Name = Format(ActiveSheet.Range("B1").Value, "d日")
If Not .Sheets("祝日").Cells.Find(targetDay, LookAt:=xlWhole) Is Nothing Or _
Weekday(targetDay) = vbSunday Then
.ActiveSheet.Tab.ColorIndex = 3
End If
Next

End With

Exit Sub

Error_Handler:

'例外時はエラー内容を表示する。
MsgBox Error

End Sub

429 名前:422 mailto:sage [2014/03/18(火) 08:56:33.08 ID:Riw4xitA]
>>428
こんな事言っちゃなんだけど、>>419-421の時点で薄々感じてたとおり
やっぱり糞コードだったw(気を悪くしたらゴメンネ)

いろいろ突っ込みどころ満載なんだけど、とりあえずこのままやるんだったら
例えば>>428

.ActiveSheet.Name = Format(ActiveSheet.Range("B1").Value, "d日")



If Month(targetDay) = Month(firstDay) Then
.ActiveSheet.Name = Format(ActiveSheet.Range("B1").Value, "d日")
Else
.ActiveSheet.Name = "翌月" & Format(ActiveSheet.Range("B1").Value, "d日")
End If

に変更するととりあえず動くよ。

根本的にコード全体を書き直したほうが尚更良いとは思うけど、
そういうのは俺みたいなアマチュアじゃなくて
お金を払って誰かきちんとしたプロに頼むような話になるんじゃないかな。

430 名前:デフォルトの名無しさん mailto:sage [2014/03/24(月) 00:24:00.84 ID:mInA5lgN]
実行中のマクロを停止させたいときにはESCか、Ctrl+PauseもしくはCtrl+Breakとのことですが、
両者に違いはあるのでしょうか?また、どれを試しても停止しない場合の対応策ってあるんですか?

431 名前:デフォルトの名無しさん mailto:sage [2014/03/24(月) 12:27:01.03 ID:KuNBiX6y]
>>430
ぐぐったらこんなん出てきた

detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1149563081

まぁ、なんで動作が違うのかは読んでも分からんかったけど。

あと、ESCとかで停まんないときは
おいらはしょうがないからタスクマネージャからエクセルごと停止させてる

432 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 16:33:15.72 ID:e3FYqT1N]
1万行×5列 の生データを元に、1万行×100列の中間データをひとまず作成し、
その後、中間データを諸々の処理に使う。
今は、VBAで中間データを計算させている。中間データはワークシート関数で計算させることもできる。
今のように中間データはVBAで計算させるのがいいのか、
それとも中間データはワークシート上で計算させVBAで計算結果を読み込んでその後の処理を行うのがよいのか?

433 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 19:49:34.25 ID:OpDSuCZS]
善し悪しの判断基準が曖昧だよ。

ブックの動作の軽さを求めるならVBAで処理して
セルには値だけを入れるほうが良いけど、
セルに数式を入れてあればどういう処理をしているのか目で見て確認できる。

これはVBAが分からない人を相手にする時には結構重要なことで
俺も勤務先で自分で使うブックはVBA使いまくりだけど
マクロ知らない上司に提出するものは出来る限りマクロを使わずに処理してる。

というか「マクロ使ったものは何をやってるか分からないから信用できない」
といわれて提出できない。

434 名前:432 mailto:sage [2014/03/29(土) 21:33:41.21 ID:e3FYqT1N]
>>433
このブックは私だけが使うものです。重視したいのはマクロが高速であるかどうかということ。
VBAの高速化に関するウェブページを読むと、
コーディングの方法によりマクロ終了までの時間が大きく変わり、
又、worksheetFunctionは比較的高速であるとの情報もありました。
そこで、下手にVBAで全部処理させるよりもワークシート関数で計算できるところはワークシートで処理させるほうが
今より早くなるのかなと思ったわけです(VBAは独学のためあまり自信がないのです)。
ちなみに、生データは1日に1行ずつ増えます。処理は毎日実行します(会社休日は実行しない)。

435 名前:433 mailto:sage [2014/03/29(土) 23:51:13.09 ID:OpDSuCZS]
>>434
あぁ、どっちみちVBA自体は使う前提で、
VBAのコード中でワークシート関数を使うかべきかどうかって話だったのね
そんなの好きにしたら良いじゃん
ワークシート関数使った場合と使わない場合を両方試して
速いほう使ったらいいんじゃないの



436 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 00:25:58.15 ID:v4CA15kT]
大量のデータをブックに貯めこむんじゃなくデータベースに入れてエクセルは
必要なデータだけ持ってきて計算にのみ使ったほうが良いんじゃないかい

ま、1万行くらいなら大丈夫ではあるんだろうけど

437 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 00:31:57.51 ID:4kZGo4f6]
VBA使う前提ではないんじゃない
VBA使うか、ワークシート関数でゴリゴリやるか、どっちかが早いかって話なんじゃ?
全部再計算させて、中間結果必要ないなら、多分VBAでやった方が早くできると思うけど
それなりにVBAがちゃんと使えるなら、って前提だが
まあ今時のスペックなら1万×5ぐらいならワークシートでも気にするほどではないと思うが

438 名前:432 mailto:sage [2014/03/30(日) 01:17:55.49 ID:hXPzlqPD]
>>435-437
レスありがとうございます。どちらにしてもVBAは使います。
今VBAで行っている計算の一部をワークシート関数で置き換えるべきかを検討中なのです。
VBA高速化関連のページは一通り目を通して以前に比べれば格段に早くなったのですが、
それでも数時間かかる処理もあって更なる高速化を目指しているところなのです。
一概には言えないようなので時間を測定してみます。
データの持ち方についてもいい方法を模索しています。ありがとうございました。

439 名前:デフォルトの名無しさん [2014/03/31(月) 00:10:35.50 ID:ymkB1Ks5]
すみません、質問です

Formula1:="=IF(A2="""",A2,INDIRECT(A2))"

A2の部分をを cells(1,2)という形で指定できないでしょうか?

やりたいことはプログラムのループでA2を
B2,B3と変えたりしたいのです、アドバイスお願いします

440 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 00:57:57.69 ID:+/Q0rb5y]
>>439
B2、B3・・・としたいなら

For b = 2 to 9
  (略) Formula1:="=IF(A2="""",A2,B" & b & ")"
Next

みたいにすればB2〜B9になる

本筋とは関係ないけどIFでA2が""の時A2を返すのってなんか無駄っぽい

441 名前:デフォルトの名無しさん [2014/03/31(月) 01:05:38.55 ID:ymkB1Ks5]
>>440さん

アドバイス頂き有難うございます。

もうひとつ質問させて頂きたいのですが、

Bという位置が不定の位置なので変数で値を決めたいのですが可能でしょうか?

お手数をおかけして申し訳ございません。

442 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 01:15:24.40 ID:+/Q0rb5y]
>>441
文字列型の変数に入れて
Retsu = "B"

こうする
(略) Formula1:="=IF(A2="""",A2," Retsu & b & ")"

B列以外だとbって変数名は不適切かな

443 名前:デフォルトの名無しさん [2014/03/31(月) 01:22:00.80 ID:ymkB1Ks5]
>>442さん

何度もアドバイス頂き有難うございます。

夜遅いのにご返事有難うございました。

今、エクセルを試す環境がないので明日試してみます。

また、質問があったら相談させて頂きます。

444 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 01:55:50.99 ID:nFhjZp0H]
>>438
処理に数時間もかかるの?
それなら、変わらない部分をメモ化すれば?

1日に1行ずつ増えるんでしょ?
前日までの行が変わらないなら、
その結果をファイルに書いておけばよい

出来れば、毎回する同じ計算を避ける(メモ化)

445 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 15:01:50.77 ID:Ial2Eqsw]
>>444
いや、そういうことするより、まず何にどれだけ時間がかかってるか計測するのが先。



446 名前:デフォルトの名無しさん [2014/03/31(月) 16:48:16.50 ID:3GCmwtHU]
エクセルで256×256のセルに数字が入っている状態で
BMPの画像を作るにはどうしたらいいでしょうか?プログラミングの技術が
ないと不可能でしょうか?

447 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 17:05:56.79 ID:r3mdI7xZ]
C言語でBMP作るのは、そういうのがあるってことは知ってる。それと同じことをvbaでやりたいってことなら
(それがvbaで出来るかどうかは知らんけど)当然
>プログラミングの技術がないと不可能
じゃないの?

448 名前:デフォルトの名無しさん [2014/03/31(月) 18:23:52.03 ID:L50LbWDs]
そうですよね・・・
自分には敷居が高そうなので諦めます。すみません

449 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 18:28:43.68 ID:8V+7Or/W]
はい敷居きた

450 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 18:31:32.29 ID:Ial2Eqsw]
>>448
「セルに数字」じゃなくて実際に色を付けて、セルの幅と高さを1:1に保って小さくして、枠線を消して
クリップボードにコピーして、BMPで書き出せば?

451 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 20:37:19.25 ID:S+MvAbw+]
図としてコピー
あれVBAからつかえんの?

452 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 01:26:03.72 ID:5tQShRLT]
三項演算子とか連想配列を最近知ったものですが
上記のような便利機能が他にも紹介されてるサイトってないですか

453 名前:デフォルトの名無しさん mailto:sage [2014/04/02(水) 00:30:48.39 ID:+8s/Qgvh]
If Not IsNumeric(data) Then

ElseIf (data > 0) Then

ElseIf (data < 0) Then

Else

End If

数値か文字として渡されるdataの判定を上記のようにしたんですけど、
冗長なのでSelect Caseにしたいです。どうしたら良いですか?

454 名前:デフォルトの名無しさん mailto:sage [2014/04/02(水) 00:53:09.51 ID:9+cif8YO]
>>453
Sgn

455 名前:デフォルトの名無しさん mailto:sage [2014/04/02(水) 01:25:50.89 ID:+8s/Qgvh]
>>454
おお、ありがとうございました!



456 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 19:04:50.32 ID:zCQPlUhY]
ちょっとズレるけど
ここのセミナーってどうなの?
ステマとかじゃなく純粋に気になった
ttp://sugoikaizen.com/

457 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 19:07:13.30 ID:Crk62Mwa]
>>456
すごくおすすめだよ
行っておいでw

458 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 20:05:46.77 ID:eYN2DOjD]
VBAをVBE以外で書きたいんですけれども、誰かVBE以外のエディターで開発されてる方いますか?
いる方は、何をお使いになってますか?

VBEで以下の不満があり、関数のアウトライン機能がないこと、列挙体変数をTabで選択せずそのまま入力するとその入力された変数名に変更されてしまうなどがあり、困ってます

459 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 20:06:57.56 ID:FLwMWrjy]
dir を使って、配列にいれたファイルをチェックするマクロを作りたいのですが、
「インデックスが有効範囲にありません」というエラーがでてしまって困っています。

Sub チェック()

Const Target As String = "C:\Users\user\Desktop\格納\"

Dim tmp() As String
tmp = Split("Scr14", "Scr16")

For i = 1 To 2
If Dir(Target & tmp(i) & ".txt") <> "" Then '←エラーの出る場所(tmp部分)
Else
MsgBox tmp(i) & vbCrLf & "が存在しません"

End If

Next
MsgBox "確認できました"

End Sub


Dirに配列を使ってチェックするのは無理なのでしょうか?ご教授願います。

460 名前:デフォルトの名無しさん [2014/04/20(日) 20:12:33.50 ID:I6Nwishv]
>>459
配列のアクセスに関するエラーだからDirは関係ないかな
Split("Scr14", "Scr16")は、Split("Scr14,Scr16", ",")の間違いだとして、
tmpは
tmp(0) = "Scr14"
tmp(1) = "Scr16"
こうなってる

なんで、ループは0 To 1にしなきゃいけない

461 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 20:26:26.65 ID:FLwMWrjy]
>>460
回答ありがとうございます。

配列に関しても理解が足りてなかったようです。

単純に文字の配列を作りたいだけなので、

Dim tmp() As String = {"Scr14", "Scr16"}

のようにしたいのですが、 = のところで、コンパイルエラーが出てしまいます。(修正候補:ステートメントの最後)

どのように修正したら良いでしょうか。

462 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 20:36:06.91 ID:kzevG+UG]
>>461
VBAではVBみたいな書き方はできない

Dim tmp
tmp = Array("Scr14", "Scr16")

463 名前:デフォルトの名無しさん [2014/04/20(日) 20:36:17.19 ID:I6Nwishv]
>>461
VBAでは変数は宣言時に初期化できないので、これで

Dim tmp(1) As String
tmp(0) = "Scr14"
tmp(1) = "Scr16"

Variantでよければ
Dim tmp
tmp = Array("Scr14", "Scr16")

464 名前:alchemist ◆IOGp1zS1sA mailto:sage [2014/04/20(日) 20:41:04.41 ID:FLwMWrjy]
>>462
>>463

ありがとうございました。成功しました。

465 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 11:33:23.29 ID:/2+x+Vgo]
Excel VBAでpowershellを実行し、その結果を取り込みたいと考えています。
powershellで実行したいのは以下のコードです。

$drive = Get-WmiObject -Class Win32_LogicalDisk | where-object {$_.deviceid -eq 'Y:'};$drive.providername

txtファイルに出力してから取り込めばうまくいくことは分かるのですが、できればtxtファイルを経由せず、直接取り込みたいです。
直接取り込む方法があれば、ご教示いただけないでしょうか。



466 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 11:50:34.55 ID:HGvdUff0]
tech.guitarrapc.com/entry/2013/07/19/200702
のサイトで見ただけなんでそれが出来るのかどうかは知らないけど

結果をクリップボードに送り込めるなら、後はそのデータをapiを使うなりDataObjectオブジェクトを使うなりで
クリップボードから取り出せる

467 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 12:31:02.08 ID:ZM+hJQpr]
>>465
ほい
PowerShellの出力をワートシートのA列に取り込むサンプル

' OpenProcess
Declare PtrSafe Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Const SYNCHRONIZE = &H100000
' WaitForSingleObject
Declare PtrSafe Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Const WAIT_OBJECT_0 = &H0
' CloseHandle
Declare PtrSafe Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Sub sample2()
  Dim hProcess As Long, lret As Long
    
  lret = Shell("powershell ""Get-WmiObject -Class Win32_LogicalDisk|Clip""", vbHide)
  hProcess = OpenProcess(SYNCHRONIZE, 0, lret)
  Do Until WaitForSingleObject(hProcess, 100) = WAIT_OBJECT_0
    DoEvents
  Loop
  lret = CloseHandle(hProcess)
    
  Cells(1, 1).Select
  ActiveSheet.Paste
End Sub

468 名前:465 mailto:sage [2014/04/23(水) 15:48:54.72 ID:05nonx0d]
>>466
>>467
返信ありがとうございます。

>>467
試したのですが、ネットワークドライブのリモート名に日本語が含まれている場合は?に化けてしまい、うまく回らない状況です。
(含まれていない場合はうまくいったのですが)

469 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 18:28:55.92 ID:ZM+hJQpr]
>>468
Shell("powershell ""$OutputEncoding = [console]::OutputEncoding;ほげほげ

470 名前:465 mailto:sage [2014/04/25(金) 00:24:01.06 ID:dAeKMCVg]
>>469
返信ありがとうございます。


>>467
Declareのところだけ既に同名の宣言をしてあったのでそれを活かす形式にし(何故かPtrSafeがうまくいかなかった)、
$OutputEncoding =〜も使わせていただいたところ、
今のところ問題なく回っています。

皆さんご協力ありがとうございました。
助かりました。

471 名前:デフォルトの名無しさん mailto:sage [2014/04/25(金) 00:48:38.11 ID:97MfQF5y]
>>470
PtrSafeは64bit環境

472 名前:デフォルトの名無しさん mailto:sage [2014/04/25(金) 19:43:27.59 ID:IKtZUAxC]
お願いします
シート名「uriae」の
F2に入っている関数をF列の下へ向かってオートフィル
で関数をコピーしていくVBAをお願いします。
関数のコピーは、同じシートのA列に文字が入力されているので
A列の文字が入力されている最終行までコピーしたいと思います。

473 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 01:31:25.36 ID:w0bO41GV]
>>472
ここは質問スレであって作ってくれる場所じゃないから
まずは自分でどうやろうとしたかを書いてみればいいと思うんだ

474 名前:デフォルトの名無しさん mailto:sage [2014/04/28(月) 01:08:06.58 ID:Z51g+zsH]
うりあえ?

475 名前:デフォルトの名無しさん mailto:sage [2014/05/05(月) 00:35:51.93 ID:UkI77+Fd]
すみません、初めてVBAを作っているのですが詰まってしまいました。

<やりたいこと>
・セルに商品NOを入力して、そのセルがロストフォーカスしたタイミングで、
入力された商品NOで別シートの商品表から、商品名をもってきたい。
<困っていること>
"Worksheet_Change"イベントを使用して、ロストフォーカスのイベントを
拾うことはできたが、ロストフォーカス前に選択されていたセルの内容を
拾えない。
(ActiveCell.Valueで取得しようとしたが、ロストフォーカス後に選択された
セルの内容を取得してしまう。)

もしよい方法があれば、ご教授いただけませんでしょうか。



476 名前:デフォルトの名無しさん mailto:sage [2014/05/05(月) 01:55:30.65 ID:uFaF33P2]
>>475
SelectionChangeイベントで、カーソルが動くたびにセルの座標をいちいち独自の履歴に溜めていく

だけど普通は商品NOが確定すると同時にChangeイベントで商品名をセットするもんだよ
ワンテンポ遅らせる理由がわからない
初心者ならなおさらセオリー通りにやった方がいい
さらに言えば、商品名をセットする程度の処理ならVBAを使うまでもなくVLOOKUPとかで可能だし

477 名前:デフォルトの名無しさん mailto:sage [2014/05/05(月) 04:35:04.82 ID:UkI77+Fd]
>>476
vlookupなんていう関数あったんですね・・・
これで解決できそうです!
ありがとうございました!

478 名前:デフォルトの名無しさん mailto:sage [2014/05/05(月) 18:42:40.78 ID:AK1zskjW]
Excel2013です。複数のページからクエリでデータを取得したいです。

Sheet1のA列から下へ取得したい先のURLが入力されていて、クエリでデータを取得し、新しいシートA1に貼り付けする。
Sheet1のA列のセルが空白になれば処理を終了する。

VBAでクエリを実行する事が出来る所までは出来たのですが、上記の様にしたいのですが知識が乏しく躓いています。

今、出来ているのは下記になります。

Sub クエリ抽出 ()

With ActiveSheet.QueryTables.Add(Connection:= _
"url;取得データがあるURL", _
Destination:=Range("A1"))
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "1"
.Refresh BackgroundQuery:=False

End With

End Sub

宜しくお願いします。

479 名前:デフォルトの名無しさん [2014/05/11(日) 20:01:24.57 ID:0QNYDm24]
申し訳ない、このスレの趣旨とはズレてると思うんだけど、総合スレ的なものがどこにあるか分からないから聞かせてほしい。
参照元のないセルにデータ(数式ではない)を入力したときに循環参照のエラーが出てしまうんだけど、EXCEL 2010にはそういうバグがありますか?
参照先のセルを見てもさっぱり原因がわからなくて困ってます。
周辺のセルはオートフィルで埋めてるので数式は大差ないのに、ある一つのセルだけどうしてもエラーになってしまいます。

480 名前:デフォルトの名無しさん mailto:sage [2014/05/11(日) 20:34:18.27 ID:9n+Ded1d]
総合スレならビジネスsoftの方に

Excel総合相談所 113
toro.2ch.net/test/read.cgi/bsoft/1398901813/l50

ってのがあるけど

481 名前:デフォルトの名無しさん mailto:sage [2014/05/11(日) 20:39:46.70 ID:0QNYDm24]
>>480
ありがとうございます。そちらで質問させていただきます。

482 名前:デフォルトの名無しさん [2014/05/11(日) 21:08:18.06 ID:valH51XC]
WordVBAスレがないんでここで質問させてください

フォルダに画像がたくさんあります。
これをWord文書の1ページに1枚貼り付けたいです。
貼り付け方は左上に合わすだけでいいのでたぶんそんなに設定はしなくていいんじゃないかな。
貼り付け方も行内でも四角でもどちらでも変わらないと思うし。
でも今後の発展のため仮に画面の中央のどまんなかにあわせ、挿入方法は「四角」だとどうなるでしょう?
幅・高さは、どちらかが外周に接するところまでひきのばし/縮めるとします。縦横比はオリジナルと同じにして。

ExcelVBAからでもCreateObject("Word.Application")みたい感じでWordを操ることができると思うのでお願いいたします。

483 名前:デフォルトの名無しさん [2014/05/11(日) 21:09:51.81 ID:valH51XC]
まあ画像のフルパス("C:\Users\USER\Desktop\pic01.jpg")みたいなのを
Excelのセルにあらかじめ書き込んでるとしましょう。

484 名前:デフォルトの名無しさん [2014/05/12(月) 01:23:50.26 ID:DXQGbXMr]
質問です。
VBAの講習を受講して思ったが、簡単な実務に生かすために、短時間で習得するための方法。
これあってますか?
★マクロを組んで、マクロで処理できない条件処理の構文を追加することを覚えることが、
一番楽で簡単なエクセル処理には向いてますか?
それとも、すべて手打ちすることを覚えるほうが、かなり有用ですか?


状況
簡単なマクロ等の自動処理がしたい。
スキルは、VBAの勉強は講習で30時間ほど。まったく身につかなかった。
関数等は普通に使える。

485 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 11:17:08.22 ID:tYXPKjS8]
今の自分が必要とするもの…で無い限りモチベーションに苦労しないか?
実務に活かす事が目的なら今の仕事を自動化するにはどうればいいかを考えれば良いと思う

>すべて手打ちすることを覚えるほうが
ってのが何を言ってるのかわかんないけど。



486 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 13:02:48.27 ID:OiSoC7y/]
マクロの記録と手書きで違うものだと思ってるのかな

487 名前:デフォルトの名無しさん [2014/05/12(月) 22:03:47.06 ID:1mlAXgHL]
マクロ自動記録で出来る事できない事は把握してるようだけど。。。
要は「簡単なマクロ等の〜」簡単がどこまでかでしょう。
最初はきちんと教えてもらった方がいい。
観念的だが、ゼロ→1は難しく1→2は比較来容易

488 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 02:43:20.87 ID:/l0lTNTz]
俺にはこの人の文章が理解できないが
30時間も講習うけてまったく身につかなかった人だぞ
うける講習まちがってるか、絶望的に向いてない人かどっちかだ

489 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 11:32:08.29 ID:VmzA9yq/]
>>484の★部分の意訳

マクロの自動記録をして
自動記録では処理が出来ない条件分岐等をVBAで追加するという方法が、
エクセルでの処理の自動化には有効ですか?

それとも、自動記録に頼らず、
全てVBAで記述することを覚えたほうが良いでしょうか?

ということだと思う。

俺なりの回答としては、自動記録を使おうが使うまいが
VBAの基本的な知識はどっちみち必要だし是非覚えるべき。

VBAで出来て自動記録で出来ないことはたくさん有るけど
自動記録で出来てVBAで出来ないことはない。

もちろん、自動記録で出来ることならVBA使わずにやったって構わないし、
自動記録で記録したほうがコード手書きするより早い場合もある。

でも、VBAを知ってないと
やりたい作業を自動記録でやるのとVBAでやるのと
どっちが楽かとか判断できない。

490 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 12:55:48.39 ID:V6Rb20LO]
再利用性とか考えると、シートからのデータ抽出、主処理、処理結果の反映って作りになる
だからマクロの記憶はベースとなるものではなく、Excelオブジェクトの操作方法を調べる時ぐらいしか使わない

491 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 16:35:43.02 ID:JkOdWH0g]
Sub A()
Range("D11").Select
Selection.End(xlDown).Columns("H").Select
ActiveCell.FormulaR1C1 = "1"
End Sub

(H列,Dの最終行)に1を入れたいんですが(K列,Dの最終行)になってしまいます。
どうすればいいんでしょうか。

492 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 16:49:49.69 ID:VmzA9yq/]
Selection.End(xlDown).Columns("H").Select

ってところが問題
これだとSelectionが"D11"で、.End(xlDown)がそこからの最終行(つまりD列の最終行)となるんだけど、
次の.Columns("H").Selectはそこを1列目(A列)として右に8列目(H列)
(つまりD列の7列右でK列)を選択している。
解決方法はまぁとりあえず.Columns("E").Select とか .Columns(5).Selectにしたり、
列の指定と行の指定を別々にやったり色々ある

493 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 18:00:38.46 ID:JkOdWH0g]
Hの文字を内部に使いたいんですがその場合はどういう方法がいいでしょうか

494 名前:デフォルトの名無しさん [2014/05/13(火) 18:51:25.04 ID:r+9o8GUq]
あるセル範囲 (行も列も複数ある) の値を配列変数に入れるには、どういう方法が一般的ですか?
行と列の二次元だけれど、配列は1次元とします。(順番はどうでもいい。セル範囲のセル数が要素数となる。)

495 名前:デフォルトの名無しさん [2014/05/13(火) 18:52:46.12 ID:r+9o8GUq]
ついでに空白セルがあった場合はそのセルは無視します。



496 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 19:01:16.72 ID:VmzA9yq/]
>>493
列と行を別々に指定する。

つまり、列はH列で決まってるわけだから
Cells(Selection.End(xlDown).Row, "H").Select
とかでいいじゃん。

Selection.End(xlDown).Row
で、Selection(つまり"D11")から下に探した行を取得して、それを指定
列はそのまま"H"でH列を指定
ということ

497 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 19:08:16.70 ID:JkOdWH0g]
>>496
ありがとうございます

498 名前:487 [2014/05/13(火) 21:08:23.50 ID:wn45zDPA]
>>488
すまん、30分と間違えた

499 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 21:32:17.40 ID:ph3+WM+5]
30分www
まぁ手書きで

500 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 15:02:32.44 ID:CuHF+7gT]
何方か>>478をお願いします。
検索してみたら、同じ様な事をしたい人が居たのですが、解決には至っていませんでした。
どうか、宜しくお願いします。

501 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 17:08:56.86 ID:ZCY9UWx+]
>>500
実行するたびにシートが増えるが、そこはどうにかしろ。

Sub foo()
  Dim r As Range
  Dim sheet As Worksheet

  For Each r In Range("A1").CurrentRegion
    Set sheet = Worksheets.Add
    クエリ抽出 sheet, r.Value
Next
End Sub

Sub クエリ抽出(ByRef sheet As Worksheet, ByVal url As String)
  With sheet.QueryTables.Add(Connection:= _
    "url;" & url, _
    Destination:=sheet.Range("A1"))
    .WebSelectionType = xlSpecifiedTables
    .WebFormatting = xlWebFormattingNone
    .WebTables = "1"
    .Refresh BackgroundQuery:=False
  End With
End Sub

502 名前:500 mailto:sage [2014/05/15(木) 01:25:42.71 ID:Gz+0SdGV]
>>501
ありがとうございます。
今夜、早速試してみます。

503 名前:デフォルトの名無しさん [2014/05/17(土) 08:01:53.07 ID:nXU1UeAN]
2次元配列の要素の数を調べるにはどうすればいいですか?
普通のはUBoundでいけるけど、2次元だと詰んでる。

504 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 08:07:13.92 ID:bGHl19aa]
それぐらいぐぐれよw

505 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 08:10:05.17 ID:q+MS9gLN]
ヘルプで十分



506 名前:500 mailto:sage [2014/05/17(土) 09:11:27.80 ID:kSvc6BWF]
>>501
実際に動作を確認しました。
シートが一枚一枚、増えるのはこちらの希望通りで、問題ありません。
期待していた通りになってくれました。大変助かりました。
重々、お礼申し上げます。ありがとうございました。

507 名前:デフォルトの名無しさん [2014/05/17(土) 18:55:01.51 ID:nXU1UeAN]
じゃあ
2次元配列の要素数を動的にして
あとでReDimで変更するにはどうしたらいいですか?
2つのうち両方とも変更したいです。

508 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 19:03:56.16 ID:q+MS9gLN]
>>507
そんなもん自分でやってみりゃいいじゃん
なんでもかんでも聞くなよ

Sub test()
  Dim a()
  ReDim a(3, 3)
  ReDim a(5, 5)
End Sub

さあ、どうなった?

509 名前:デフォルトの名無しさん [2014/05/17(土) 19:54:30.60 ID:nXU1UeAN]
>>508
あれ、できるじゃないか。
おかしいな。
2次元動的配列は、最終の2次元目のみ要素数を変更できると書いてあったのに。

510 名前:デフォルトの名無しさん [2014/05/17(土) 19:57:07.95 ID:nXU1UeAN]
実際こうしたらエラーが出たぞ。

Sub test2()
Dim a() As String
ReDim a(3, 3)
ReDim Preserve a(5, 5)
End Sub

511 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 20:48:25.73 ID:q+MS9gLN]
>>510
ヘルプぐらい読め
ていうかまず一番にヘルプを読め
ヘルプでわからなかったらググれ
それでもわからなかったら人に聞け

512 名前:デフォルトの名無しさん [2014/05/17(土) 21:35:47.99 ID:nXU1UeAN]
ヘルプ見つからず、検索出てこず、ここで人に聞いても回答なし。
詰んでる。

513 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 21:43:18.79 ID:E1N9nGHa]
PreserveなしのRedimは次元数も要素数も変更できる
Preserve付きのRedimは次元数は変更できず、最後の次元の要素数のみ変更できる

514 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 22:28:57.78 ID:q+MS9gLN]
>>512
Excelが入っててヘルプが入ってないわけないだろ

515 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 22:40:38.76 ID:bGHl19aa]
これすら見つけられなかった?
Redimステートメント
msdn.microsoft.com/ja-jp/library/w8k3cys2.aspx



516 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 22:42:59.11 ID:bGHl19aa]
VS2013?間違えた

517 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 23:06:02.53 ID:q+MS9gLN]
msdnだと日本語のリファレンスが見つからないんだよなあ (VBはあるけどVBAが見あたらない)
msdn.microsoft.com/en-us/library/gg251578%28v=office.15%29.aspx

探し方が悪い気もするんだけど、ようわからん

518 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 11:25:50.87 ID:f0QDfVej]
正直、ヘルプMSDNとかよりもググって誰かの書いた説明の方が
わかりやすいと思ってしまう俺はド素人なんだろうな。

519 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 11:52:19.34 ID:rUx0aG1K]
とりあえず動けばいいレベルのマクロを作るだけなら何を参考にしてもいい
想定外の動作をしてバグか仕様か自分の勘違いかわからない時は、結局はmsdnやヘルプを確認するしかない時もある

もちろん公式文書にも間違いはあるので注意が必要だけど、>>510みたいにヘルプにちゃんと書いてあることを
あたかも大発見みたいに書かれると萎える

520 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 16:00:29.34 ID:1/it3LsY]
>>518
英語力の問題では?

521 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 16:47:32.55 ID:0bx4PTQ0]
>>518
ヘルプやMSDNがわかりやすいと思ったら、だれもそんな解説書かないだろ
ヘルプみてわけわからんなら解説探せばいいけど、公式情報みるのは最低限必要

522 名前:デフォルトの名無しさん [2014/05/18(日) 21:22:16.26 ID:UBuQU1Du]
toro.2ch.net/test/read.cgi/tech/1382015080/

523 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 22:00:39.47 ID:H/JD4vj2]
MSDNも、機械翻訳版だと無意味に近いし、
人間が訳したのは英語版の重要なところを
こっそりスッ飛ばしてる場合があるから要注意だ。

524 名前:デフォルトの名無しさん mailto:sage [2014/05/21(水) 22:23:52.70 ID:BFHFMym8]
俺ほどの人間は、自分で調べるなんて愚行しない。
ここに書いて手っ取り早く解答得るのがベスト。

525 名前:デフォルトの名無しさん [2014/05/22(木) 17:38:55.74 ID:OR1KcKew]
そして素人の書いた適当なレスに騙される



526 名前:デフォルトの名無しさん mailto:sage [2014/05/22(木) 18:09:40.63 ID:jxaWow30]
情報とか手がかりじゃなくて解答というあたりが・・・

527 名前:デフォルトの名無しさん [2014/05/24(土) 10:53:14.15 ID:eu02DRrY]
Excel2013 の PDF保存のコードについて教えてくださいませ。
名前をつけて保存、で複数シートを1つのPDFに保存するコードを書きましたが
なぜか動く動きません。

Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
Sheets("Sheet1").Activate
ActiveSheet.ExportAsFixedFormat type:=xlTypePDF,
Filename:= "C:\Sheet123.pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=True

Arrayで最初に選択したシートのみが出力されてしまいます。
2行目の Sheets("Sheet1").Activate を削除しても結果は変わらずでした。
マクロで記録しても、上記と同様のコードが記録されます。
しかしこの記録されたマクロを実行すると、やはり最初に選択したシートしかPDF出力されません。

何が足りないのでしょうか?

528 名前:527 mailto:sage [2014/05/24(土) 10:56:45.70 ID:eu02DRrY]
ごめんなさい!出来ました!ワ〜イ
ウィンドウを複数開いてたのが原因でした

529 名前:デフォルトの名無しさん mailto:sage [2014/05/25(日) 22:23:52.52 ID:8sEJJ/Xn]
VBAを使ってπの道の桁数の計算に挑戦することは可能ですか?

530 名前:デフォルトの名無しさん mailto:sage [2014/05/25(日) 22:24:17.44 ID:8sEJJ/Xn]
>>529
道→未知・・

531 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 10:24:59.73 ID:xBqIirxp]
挑戦するだけなら可能でしょ
成功はしないけど

532 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 12:13:08.87 ID:ptXAqcmg]
たぶん未知の領域に到達する前に
後から来る人に追い越される

533 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 12:26:24.18 ID:dlApJPlM]
道の桁数の計算方法が確定しているなら
その計算に必要なリソースが確保できるなら可能

534 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 15:34:56.33 ID:EGdbrytd]
いや、未知の桁数に達するまで太陽系が存在出来るかを問題にしないと

535 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 19:57:34.24 ID:dlApJPlM]
>>534
挑戦出来るかどうかと聞いてるから、そこは問題にならない



536 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 20:30:26.14 ID:9XuuTI4K]
Excel VBA 量子コンピューター版が出れば最初に的確に着手した人なら達成出来る?
it.impressbm.co.jp/articles/-/10453
D-Wave はコンピュータではないらしい。
計算を高速化する独自の数式や手法を発見すれば現在のExcelでも可能?

537 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 20:39:03.08 ID:JsbqvBWY]
考えてみればExcelは1つじゃない
手に入るだけの台数の高速なPC(数千・数万台とか)とExcelで並列処理させればできるか?
VBAが何所まで並列処理にむいているかはやったことが無いのでわからんが。

538 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 20:51:31.05 ID:LCv9Wl+A]
>>529
VBA は 64KB 壁があったりして棘の道だと思うが君ならきっとやれる。

539 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 23:11:20.50 ID:Ed2uGBCo]
仕事で自動化したくてOLEオートメーション使いたいのだけど
これってもう古いの?
どこ探してもよくわからない
おすすめの本ってある?

540 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 23:43:24.09 ID:7NSDbYse]
>>539
質問の意味が良くわからない
何を自動化したいのか
「オートメーション」という言葉を何か勘違いして受け取っているようにも見える

541 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 23:47:12.46 ID:Js6v2rIN]
ActiveXでぐぐれなさい

542 名前:デフォルトの名無しさん [2014/05/27(火) 11:36:41.29 ID:CQuE4vUS]
VBAで満足しているんですが、
ほかのプログラム言語覚えるとなにかいいことありますか?
VBAじゃ出来ないことある?

543 名前:デフォルトの名無しさん mailto:sage [2014/05/27(火) 12:10:21.53 ID:pK8lgo+n]
>>542
もちろんVBAにできないことはたくさんあるけど、他の言語にもそれぞれ苦手な分野があるんで
自分のやりたいことがVBAじゃ大変だとわかってから、その作業に最適な言語を探した方が無駄が少ないかもね

544 名前:デフォルトの名無しさん [2014/05/27(火) 12:29:28.96 ID:CQuE4vUS]
>>543
そうですかぁ
目的はっきりしないうちに、
ほかの言語覚えるのも大変ですよね・・
VBAの限界がみえるまではVBAだけで行きます!

545 名前:デフォルトの名無しさん [2014/05/27(火) 12:39:03.97 ID:JkwAmhtq]
>>542
JAVAとかCとかだと求人が多いけどVBAじゃ求人が少ないから
つぶしが利かない



546 名前:デフォルトの名無しさん [2014/05/27(火) 12:44:54.08 ID:CQuE4vUS]
>>545
なるほど、
仕事じゃなく個人で使うだけならVBAで十分かな?
足りなくなったら、DLL?とかほかの言語で作って、
VBAで呼び出せばいいか・・

547 名前:デフォルトの名無しさん mailto:sage [2014/05/27(火) 13:18:47.16 ID:1WWRQ+yd]
Excel VBAで作ると、出力先がほぼシートになるから結構便利なのよね
グラフとか後でくっつければ良いだけだし

sheet1、使い方の説明とか入力用
sheet2、出力用テンプレート
sheet3以降、出力先

って感じで作れば、使い方とか後で訊かれる事も少ない
インターフェイスの設計とか悩まなくて済むのはメリット

548 名前:539 mailto:sage [2014/05/27(火) 21:24:50.12 ID:ynAF/lre]
>>540
Excelに数値を入れてCADでそれに沿った図面を作成したいのです。
OLE自体をあまり理解してないのですが、
アプリケーション自体が公開しているメソッド(CADでもソフトによって違う)
を使用するということでしょうか

549 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 06:25:58.57 ID:am2JQYoj]
つまり、CADソフトをOLEオートメーションでEXCELから操作したい、と
OLEオートメーションって言葉は古いな。間違ってはないが

VBAの命令としてはそのCADソフトのオブジェクトを生成するCreatObjectって言う命令だけ
それ以外は普通のEXCEL VBAの入門書でだいたい事足りるかと

あとはそのCADソフト側で用意されてるメソッドなり何なりを操作する
それはそのCADソフト側の問題なんでそっちに聞いてください

550 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 09:41:47.76 ID:BSb9yGb4]
ああ、昔AutoCADで似たような事やったな
VC++だったけど
CAD側の文字コードに注意してやらないと、文字化けとか大変な事になる予感

使い方としては、549の言ってる通りでいけると思うけど、
Excelで数値入れるのが果たして使いやすいかというと、
実はそうでもなかったりしがちになるので、
必要な要件はきっちり洗い出す必要あると思うよ

551 名前:デフォルトの名無しさん [2014/05/28(水) 11:36:19.19 ID:tvrcqpPe]
VBAの標準関数のソースを見たいのですがどこに記述されているのでしょうか?

552 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 11:42:23.21 ID:mspF09G9]
非公開じゃないの

553 名前:デフォルトの名無しさん [2014/05/28(水) 11:52:24.90 ID:tvrcqpPe]
そりゃないよかあちゃん

554 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 16:09:51.90 ID:PxoSlPb7]
excel vba実行中の画面のちらつきは
Application.ScreenUpdating で 抑えられたが
それでもタスクバーがちらついて困っていた。
タスクバーのちらつきは Application.ShowWindowsInTaskbar
で抑えられるのが分かった。

ShowWindowsInTaskbar って昔からありましたっけ?

555 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 18:00:58.65 ID:pq9FJS3g]
>>554
> ShowWindowsInTaskbar って昔からありましたっけ?

なんでググらないの?



556 名前:デフォルトの名無しさん [2014/05/28(水) 19:31:12.32 ID:tvrcqpPe]
あるセル範囲を選択してて
その中にあるセルで
 (1) 空白なら除外する
 (2) 同じ値があれば1つを残して他は除外する
の操作をしたあと
各セルの値をString型の配列変数として入れたいんです。
そのためにはどういうコードを書けばよいでしょうか?

さあ、書きなさい。

557 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 19:51:40.59 ID:6RxarYIU]
rangeをOLEで取得するとarrayになるようですが
VBA以外の言語とデータをやり取りするにはどうすれば良い?

558 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 20:35:31.75 ID:aALl0Wxc]
>>557
Variant型はExcelやVBAだけで使える型じゃなくてWindowsシステム全体で定義されてるんで
たいていの言語でそのまま扱うことができる

559 名前:539 mailto:sage [2014/05/28(水) 21:11:33.80 ID:tkho5s2n]
>>549-550
詳しい解答ありがとうございました。
非常に分かりやすかったです。
描くのは直線だけでなるものなので業務の時間を短縮できるのかなと。
あとはCADソフト側の命令の仕方ですね、頑張って探してみます。
ありがとうございました。

560 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 23:52:38.39 ID:am2JQYoj]
>>556
あるセル範囲を選択してて
その中にあるセルで
 (1) 空白なら除外する
 (2) 同じ値があれば1つを残して他は除外する
の操作をしたあと
各セルの値をString型の配列変数として入れる
こういうコードを書けばよいよ

要件定義が甘いが、どこがわからんかわからん

561 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 00:20:40.78 ID:pIxlUzsM]
>>556
Dictionary使うのはどう?
Existで調べて、無かったらAdd
これを繰り返して最後にString型の配列変数に入れる

562 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 00:22:14.59 ID:pIxlUzsM]
スペル間違えた
× Exist
○ Exists

563 名前:デフォルトの名無しさん [2014/05/29(木) 08:48:17.68 ID:/DaeRAwK]
Do
DoEvents
Sleep (100)
Loop Until flag = True

な無限ループをイベント監視用にユーザーフォームで走らせているんですが,
フォームのタイトルバーを捕まれるとループが止められてしまいます。

ループ用にvbModelessなフォームをHiddenで隠して回しても,
他のフォームのタイトルを捕まれると止まってしまいます。

タイトルを捕まれてもマクロが止まらなくなる方法ってありますか?

564 名前:デフォルトの名無しさん [2014/05/29(木) 12:02:11.02 ID:Amp5ddSE]
>>561
ありがとうございます。
あなたはこのスレにときどき登場するDistionary厨のかたですね?
これを機会にDisctionaryの使い方を理解してマスターしようと思うのですが
いいサイトか本はないでしょうか?

565 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 14:29:26.90 ID:sq7Ykhg/]
>>563
残念ながらExcelVBAはマルチスレッドに対応しておりません

というか、止められると言っても、終了してしまうのではなく中断するだけだろ?
タイトルバーを掴んでいる間さえも中断しちゃまずいって、いったい何を監視しているやら?
それに、ユーザーフォームの移動なんて、そう頻繁に行うことでも、長時間行うことでも無いじゃん

それとも、自分が使う物ではなく他人が使う物で、タイトルバーを掴んだままにすることで
意図的に監視を一時停止出来ちゃうと困るとかなのかな?
だとすれば、パス掛けたところで簡単に破れて、ソース弄れば監視の無効化も、もっと簡単に
一時停止できるようにすることも可能なVBAでそういうものを作ること自体が不適切

それに、タートルバーを掴んでいる間、つまりExcelの操作をしていない間も監視が必要って事は、
監視対象はExcel上のものではないんだよね?
だとすると、その辺に別の対処法の突破口があるかもしれないな



566 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 15:11:02.01 ID:dLhscPPS]
>>563
Sleepを消せば少し改善されると思う
空のループはDoEventsだけで十分

567 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 15:20:33.17 ID:mJj+KV4g]
タイトルバーを掴んでる間はDoEventsが戻ってきてないようだが

568 名前:563 [2014/05/29(木) 17:38:29.96 ID:/DaeRAwK]
>>565
やりたいことは測定器からのデータ取得(GPIB)で,2秒に一回のイベントを監視する目的です。

具体的には AD変換完了のイベント発生 -> 測定値の取得コマンド発行 -> 測定値の転送
という流れで,イベントが発生したら2秒以内に「取得コマンドの発行->転送」をしないと
データを取りこぼしてしまいます。
そこで,フォーム(中断イベント発生用ボタンを表示)がじゃまだと画面の脇によける動作をすると
ループが止まって取りこぼすので困っておりました。

その後,WindowsAPIのSetTimer/KillTimerを試しまして,今回の目的(2秒)なら
行けそうな感じで収まりました。

>>566
>>567 のとおり,つかんでいる間は帰ってきてくれないようです。

569 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 18:03:06.09 ID:mJj+KV4g]
そのAD変換完了のイベントってのがどうなってるかしらんが
それで空ループまわして待つ意味がわからんし、時間制限があるのに変換完了イベントから
取得コマンド発行までの間でDoEventsする必要もわからん

570 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 19:47:40.83 ID:sq7Ykhg/]
>>568
そういうのは普通、測定器→ローカルデータ、ローカルデータ→Excelって二段構えでやるもんだよ

ユーザーフォームのタイトルバーを掴む意外にも、ループが一時停止される要素はあるし
Excelのエラーで強制終了して再立ち上げするにも、2秒以内じゃまず無理なので取りこぼしが出る

だからまずはデータをローカル(HDD)に保存するってことだけに専念したアプリやスクリプトを走らせて
それが保存するローカルデータをExcelで監視するってのが常套手段
それなら、Excelの監視が止まっている間にイベントが2回発生しようと3回発生しようと
HDDにはその2回なり3回分なりのデータが保存されたままになるから、後からいくらでも読み出し可能

571 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 19:57:52.53 ID:dLhscPPS]
それこそ外部プログラムからOLEでワークシートにデータを書き込んで、Changeイベントで処理すべきだろ
リアルタイムで処理する必要があるかどうかは知らんが

リアルタイム性が必要なければファイルにCSV保存して、あとから加工なり分析なりすればええ

572 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 21:38:45.66 ID:pIxlUzsM]
>>564
Dictionaryでググレばいいと思うよ
俺もそうした

573 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 22:25:02.22 ID:MJP51S+k]
"プロジェクトまたはライブラリが見つかりません"のコンパイルエラーが発生したので以下のページを参考にして解決しました。
www.moug.net/tech/exvba/0150128.html
お聞きしたいのは、参照不可となった原因です。あと、参照不可となっていたライブラリのチェックを外すことで今後問題が起きないのか?ということです。
ちなみに、開発環境と実行環境は同一のPC1台のみです。よろしくお願いします。

574 名前:563 [2014/05/30(金) 08:43:27.05 ID:VsNT1DP0]
>>569
イベント=グローバル変数のビットが立つだけでなので,
単純にループを回し続けてグローバル変数を確認し続ける処理となってます。
また,DoEventsは中断/終了処理のためにフォームのボタンを押す必要があるためです。

>>570,571
CSVを吐かせるのが一番容易ではあるんですが,他者がメンテするときに開発環境等
構築の必要がないVBAのみで完結させたいなというのがありまして。

575 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 09:28:42.64 ID:ztZ/Ok0F]
>>574
悪い事は言わん、計測器関連はVBAでやるの止めとけ
今はVisualStudio Expressもあるし、無料で環境構築できるんだから、
Excel に拘らない方が良い

どっちかつうと、VB側からExcel吐き出しする方が経験上楽で確実



576 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 09:34:30.18 ID:tZceHJTB]
Excel2個起動したらマルチで動くよ

577 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 10:03:47.61 ID:gm611zV1]
そのグローバル変数を書き換えてるプロセスはいったいどこで動いてるんだ?

578 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 15:23:03.23 ID:g1Pwsqem]
>>574
>単純にループを回し続けてグローバル変数を確認
グローバル変数セットするときにイベント起こすなり特定プロシジャ呼ぶなりすれば良い話
ループで変数監視とかどう考えても設計がおかしい

>DoEventsは中断/終了処理のために
変換完了イベントから取得コマンド発行までの間は中断できないようにすれば良いだけ
要求される仕様にもよるけど設計がおかしい

579 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 15:38:13.41 ID:g1Pwsqem]
>>573
>参照不可となった原因
たとえば参照設定されていたプログラムをアンインストールしたら当然参照不可能になるわな
お前のPCに起こった事がそれだけの情報でわかるわけがないだろう

>今後問題が起きないのか
お前のプログラムが何をどうやってたかわからんのに、わかるわけがないだろう
コンパイルしてみてエラーが無いようなら、一応問題が無いと言えるかもしれんが
ライブラリの中身が変わって参照設定が無くなってたりしたら、そのライブラリに
互換性の問題があったりするかもしれん

580 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 15:45:03.61 ID:9Pr1vy7p]
いつもの

「設計が不適切だから、実現が困難になる」

という、初心者がよくハマる罠ですな

581 名前:デフォルトの名無しさん [2014/05/30(金) 16:06:49.06 ID:VsNT1DP0]
>>575
テンプレート作っておいて最終的にcom使って吐き出させるのが確実ですかね。

>>577
すみません,私の勘違いでグローバル変数が変わるのではなく,
ループ中で測定器のステータスを読みに行くコマンドを送り,
ADデータが更新されたかのフラグを自分で立てていました。

582 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 21:06:21.63 ID:uIjyT6t9]
具体的な記述は自分で考えますので方向性だけお力をおかしください


現在、シート1にデータの羅列を手入力しています
その後、いくらかの計算を経てシート2に転写しています
このとき、シート1は月日関係なく羅列が続いているのですがシート2は月末ごとに集計したいと考えています


↓へ続く

583 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 21:07:57.55 ID:uIjyT6t9]
イメージとしては

・シート1
1/1   5
1/10  3
1/25  6
1/31  10
2/3   5
2/20  2
3/2   4


シート2
1/1   5
1/10  3
1/25  6
1/31  10
----------
1月最大 10
1月最少 3
1月計  24
----------
2/3   5
2/20  2
----------
2月最大  5
2月最少  2
2月計   7
----------
3/2   4

こんなイメージです、初めは文字通り転写していたのですがそうするとあとから月末の集計を挟むとずれるのでそのあたりヒントをいただけたらと思います

584 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 21:20:31.98 ID:9Pr1vy7p]
クラス使って構造化すれば良いだけやん

因みに最大の反対は最小で、最少の反対は最多な

585 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 21:36:10.28 ID:e0LBlZuD]
転写後に集計行を挿入する。
転写元と転写先の行指定を同一にしないでわける。
(Row1行目をRow2行目に転写)



586 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 22:04:39.86 ID:FUgryqqJ]
>>583
分かり易いコードだったら
シート1の上から月の変わり目まで値をシート2に代入して、
その間最大と最小と月計を求めておいて、それをシート2に書き込んだら
また次の月を処理してやればいいんだけど、
別にそんなことしなくてもピボットで行けるんじゃないかと思う。

587 名前:デフォルトの名無しさん mailto:sage [2014/05/31(土) 01:24:27.59 ID:BIC+yzDE]
ひとまずシート1からシート2へ、
全てのデータをコピーする

次にシート2へ、最大値・最小値・合計を、
後ろの行から追加していくと、
行の数え間違いが減りそう

588 名前:デフォルトの名無しさん mailto:sage [2014/05/31(土) 08:16:56.63 ID:Ym0wh1sa]
エクセルの2003で作ったマクロを2013で使用したいのですが、
そのままコピーをしても使えません・・・

互換モードで変換しても、上手く起動してくれません。
どうしたらよいでしょうか?

589 名前:デフォルトの名無しさん mailto:sage [2014/05/31(土) 08:31:34.05 ID:hcRtMx6V]
>>588
使えないってのどういう状況?
コピーって、何をどうコピーしたんだ?
それは本当に2003で作ったマクロなのか?

情報が足りなすぎて何とも言えん

エスパーするならセキュリティセンターの設定で行ける気がするが

590 名前:デフォルトの名無しさん mailto:sage [2014/05/31(土) 10:11:58.90 ID:0hCJmlYV]
>>588
エスパーすると、
信頼できる場所、拡張子(マクロ有効ブック)、参照設定、PtrSafe
あたりかなあ?

591 名前:デフォルトの名無しさん [2014/05/31(土) 17:06:26.42 ID:vfwWW6a6]
質問でございます。
エクセルVBAで効果音を鳴らすにはいかにすればよろしいでしょうか?

また、画像を張ったり、消したりするにはどのようなコードを書き込めばいいものでしょうか?

592 名前:デフォルトの名無しさん mailto:sage [2014/05/31(土) 17:57:42.27 ID:Ym0wh1sa]
マクロの制作代行(修正)を3000円位で行ってくれる所ないかな?

既にあるマクロに機能追加してもらいたいんだけど、
スキルがなくて困っています。

593 名前:デフォルトの名無しさん mailto:sage [2014/05/31(土) 18:03:54.56 ID:MZZ4d7NB]
>>591
www13.plala.or.jp/kymats/study/multimedia.html

594 名前:デフォルトの名無しさん [2014/05/31(土) 18:15:17.55 ID:xW/2bai/]
>>593
いまいち、理解できないっす。
要するにどういうコードを書き込めばよいのでしょうか?
そして音源はどこにあるのでしょうか?

595 名前:デフォルトの名無しさん mailto:sage [2014/05/31(土) 18:24:22.00 ID:6LzyMI+6]
>>592
翌日以降に発覚した瑕疵等は別途見積もり・請求させていたたきます



596 名前:デフォルトの名無しさん mailto:sage [2014/05/31(土) 18:42:36.10 ID:ROAafTCn]
>>592
マッチングサイトなんてググればヒットするでしょ

597 名前:デフォルトの名無しさん mailto:sage [2014/05/31(土) 20:08:49.36 ID:ENgUpqsf]
>>594
ググるという発想はないの?

598 名前:デフォルトの名無しさん [2014/06/01(日) 00:30:52.76 ID:1fLVc9/2]
エクセルに画像を取り込もうとすると、テキストファイルウィーザード「選択したデータは区切り文字で区切られていま」
というエラー?が出て、画像が取り込めず、文字列がだーっと出る画面になるのですが
保存された画像を普通に貼り付けるにはどうすればいいのでしょうか
保存の仕方がわるいのでしょうか?

599 名前:デフォルトの名無しさん [2014/06/01(日) 00:44:57.06 ID:J9cZPePT]
>>592
その値段では、誰も引き受けてくれんぞ。30万出せば、金に困っている
連中の誰かは、受けてくれるだろうが。

600 名前:デフォルトの名無しさん mailto:sage [2014/06/01(日) 01:56:31.76 ID:4/q6rSuq]
>>598
君は諦めた方がいい

601 名前:デフォルトの名無しさん mailto:sage [2014/06/01(日) 10:15:57.44 ID:Vdytlm3J]
>>592
相談料 3000円 (120分以内)なら考えてもいい

602 名前:デフォルトの名無しさん mailto:sage [2014/06/01(日) 10:28:28.23 ID:mo4nCN9m]
>>601
120分3000円でいいならもうボランティアでやってやれよw

603 名前:デフォルトの名無しさん mailto:sage [2014/06/01(日) 10:39:07.65 ID:m+nDoAYH]
>>598
まず最初にここは Excel VBA質問スレ
この時点でアウト
君が相談すべきスレは、ビジネスSOFT板のExcel総合相談所 113

ちなみに注意としてExcelのバージョンとどういう操作をしたのかくらい書けよ
Excel2007(2010)だとして、挿入→図からファイルを選択すれば良いのをなんでテキストファイルウィザードなんてもんが出てくる?

604 名前:デフォルトの名無しさん [2014/06/01(日) 12:52:54.92 ID:QlI1F8ze]
すいませんです
Excel2010で、ゲーム製作をしてましてVBAで画像が自動的に出たり消えたりと言うプログラミングを
設定しているのですが、画像がうまく開かないで苦心しておりました

605 名前:デフォルトの名無しさん [2014/06/01(日) 14:52:48.34 ID:ycdnLEoX]
Excel2007です。
Excel2003で動いていた、グラフの書式をコピーするVBAを実行すると、
データまでコピーされてしまうようになり、困っています。
ActiveSheet.ChartObjects("グラフ 1").Activate
ActiveChart.ChartArea.Copy
ActiveSheet.ChartObjects("グラフ 2").Activate
ActiveChart.Paste Type:=xlFormats

ヘルプにはxlPasteFormatsを指定とあるので、修正してみたのですが変わりませんでした。

グラフ選択→コピー→グラフ選択→形式を選択して貼り付けの書式を選択で、
シートに対してPasteSpecialを使えば元の動きになることはわかったのですが、
もともと使っていたPasteは使えなくなったのでしょうか?
それとも使い方がわるいのでしょうか?



606 名前:デフォルトの名無しさん mailto:sage [2014/06/01(日) 15:23:51.99 ID:WV5hG6M3]
Excel2003ですが
VBAでくり返し操作するときは自動保存をOFFにしたいのですが
オプション設定はVBAで操作できるのでしょうか?

607 名前:デフォルトの名無しさん mailto:sage [2014/06/01(日) 17:18:12.48 ID:XKcLg8fj]
>>606
 Application.AutoRecover.Enabled = False

608 名前:606 mailto:sage [2014/06/01(日) 21:41:47.16 ID:5iy05h8R]
>>607
これは便利ですねぇ知りませんでした。 ありがとうございます。

609 名前:デフォルトの名無しさん mailto:sage [2014/06/02(月) 18:30:40.65 ID:YbWwqAFD]
教えてください。キーワードだけで構いません。
チャートオブジェクトの横幅と高さをVBAで変更することはできますが、
グラフオブジェクトの中のグラフ表示範囲(?)を変更する方法がわかりません。

ワークシートに複数のグラフがあり、これらのグラフの横幅を揃えたいのです。
チャートオブジェクトの横幅は揃っているのですが、図中に矢印で示すグラフ表示範囲がずれてしまっています。
手動ではなくVBAで自動的に揃え直したいのですが方法がわかりません。

よろしくお願いします。
i.imgur.com/fSS5gf9.png

610 名前:デフォルトの名無しさん mailto:sage [2014/06/02(月) 19:36:28.50 ID:Qua9WhFM]
>>609
PlotArea.Width

611 名前:609 mailto:sage [2014/06/02(月) 22:43:18.89 ID:QcqSJ9d9]
>>610 ありがとうございました。
今試せる環境ではないので明日試してみます。
とりあえずググったところ下のように書いてありました。
厳密に複数グラフの横幅を揃えるのは難しそうですね。

www.moug.net/tech/acvba/0020000.html
プロットエリアの位置や大きさは、Top/Left/Height/Widthプロパティで設定しますが、
これらのプロパティで設定する領域は、プロットエリアの書式設定の際に参照される領域よりも大きくなります。
差が出るのは、軸/軸の目盛ラベル/データテーブルの領域分です。
これらを除いた領域の位置、及び大きさはInsideTop/InsideLeft/InsideHeight/InsideWidthプロパティで取得できますが、設定は出来ません。
したがって本来の意味でのプロットエリアの大きさを思い通りに設定するのは、非常に困難であると言えます。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<194KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef