トップページtech
1001コメント417KB

Excel VBA 質問スレ Part33

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/10/17(木) 22:04:40.64
ExcelのVBAに関する質問スレです

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

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

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

コードが嫌な人はこちらのスレへ
http://toro.2ch.net/test/read.cgi/tech/1381151995/l50
0263デフォルトの名無しさん2014/02/09(日) 05:10:14.13
とは言えやっぱり使えるにこしたことはないよ。
昔のアセンブラなんかは掛算や割算も自前でロジックを組まなければならない時も
あったけど、今そんなの嫌でしょ?
例えば配列の中の値をソートしたいとして、それが出来るメソッドが最初から有ったとき、
わざわざ自前で作る必要はないよね?
そのロジックの仕組みを知ってて使うのと、知らないで使うのも違うけど、
そのロジックの仕組みを知ってても、そう言った便利機能を使えるのと使えないのではやっぱり違うよ。
0264デフォルトの名無しさん2014/02/09(日) 10:56:14.31
>>262
> 継承とかできないとかクソとか言ってる奴



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

は、別に排他じゃないだろ。
バカなの?
0265デフォルトの名無しさん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」になるので、文字列でも数値への変換無しに、
数値と同じ並べ替えをしたい場合や、逆に数値を文字列数字の順にしたい場合もある

便利なモノほど利用者をバカにすると言われてるわけで、
もちろん便利じゃないものを使いこなせる能力を持った上で、
便利なものを有効活用して工数を減らすのは良いが
便利なものに頼りきりになってしまうのも、問題と言えば問題だな
0266デフォルトの名無しさん2014/02/09(日) 13:59:41.61
>>265
大体は同意だけど、

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

これは少し違うと思う。
便利なものが有った場合、今度はそれをいかに有効活用するかということと、
自分で考えて作った方がいいかの選択肢が出てくる。
上のような例の場合、本来の項目を変えずに別項目を作って、
そこに前0で埋めたり、大文字変換した値を用意してソートすれば事足りる。
それもダメだというならそう言うLinqとラムダ式で組めばいい。
視点が変わるのと、出来ることが増えることによって夢がひろがりんぐになるわけだ。
0267デフォルトの名無しさん2014/02/09(日) 14:13:43.52
解ってないのか
0268デフォルトの名無しさん2014/02/09(日) 19:53:17.21
解らなくてもいい
理解しろ
0269デフォルトの名無しさん2014/02/10(月) 00:39:22.03
>>265
そう思うんなら中間言語使って頭鍛えなよ。
そんなのの成り立ち一々全部理解しなきゃいけないなら
VBAでだってまともに組めないよ。
0270デフォルトの名無しさん2014/02/10(月) 10:47:10.65
>>265
便利なものが人をバカにするんじゃなくて
便利なものに頼りきる人はもともとバカだっただけ
0271デフォルトの名無しさん2014/02/10(月) 15:31:20.21
>>265
それはExcelのソートのインターフェースが糞なだけ。
まともな言語ならラムダ式とかで比較を書ける。
クイックソートとかをいちいち真面目に実装するのは面倒だろ。
0272デフォルトの名無しさん2014/02/10(月) 17:52:51.32
20年前に仕様が固まったBasic言語に文句言う奴
0273デフォルトの名無しさん2014/02/10(月) 21:17:25.11
>>271
Javaってラムダ式あったっけ?
0274デフォルトの名無しさん2014/02/10(月) 22:12:34.15
>>273
Java8で導入とか何とか。
0275デフォルトの名無しさん2014/02/10(月) 22:59:24.35
>>272
Basicと言う観点から見れば仕様が固まるなんてことはないよ。
時代に合わせてる常に仕様は変わる。
VBAがたまたまVB6.0辺りの仕様で停滞してるだけ。
もっと前のN-Basic辺りは
Console 0,25,0,1とかおまじないのようにみんな付けてたけど、
VBAから入った人にしてみれば何のこっちゃってことになる。
0276デフォルトの名無しさん2014/02/11(火) 08:44:06.43
便利なことって言うより新しいことに頭がついていけないじじいなんだろ
0277デフォルトの名無しさん2014/02/11(火) 10:11:19.84
Excelでもバージョンアップのたびに関数がどんどん追加されてるけど
古いシステムでも修正なしで動くように新しい機能をわざと使わないことならある
0278デフォルトの名無しさん2014/02/11(火) 11:13:16.08
windows xpとoffice2003廃止に伴い、
もうバージョン違いに悩まないで良くなるのかなあ。
0279デフォルトの名無しさん2014/02/11(火) 12:02:07.37
古いのがなくなるのとバージョンアップは無関係だろ
これからもどんどん新機能が追加されてくに決まってる
0280デフォルトの名無しさん2014/02/11(火) 14:29:28.14
未だにOffice2000使ってますが、特に問題ないです。
0281デフォルトの名無しさん2014/02/11(火) 23:00:10.06
特定のセルに入力がないと空欄になるようにif関数が入力してあるんですが、
空欄のセルだけ非表示にできるようにはどうマクロを組めばよいのでしょうか。
数式が入っていなければ非表示にできるようには組めるのですが、
見た目上は空欄でもセルには数式が入力されているため上手くできません…。
どうかご教授ください。
0282デフォルトの名無しさん2014/02/11(火) 23:05:27.59
>>281
セルの非表示ってどうやってやってるの?
0283デフォルトの名無しさん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
で処理をしています。
ですがこれだと関数で空欄になっていてもセルには数式が入っているので、
非表示にはならないので困っています。
0284デフォルトの名無しさん2014/02/12(水) 07:33:54.19
>>283
ちょっと思い出せないけどxlCellTypeBlanks以外に何かなかったっけ?
ないなら判定を自分で作ればいいかと
0285デフォルトの名無しさん2014/02/12(水) 10:47:06.24
普通にValueとかTextプロパティを見ればいいだけでは
0286デフォルトの名無しさん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
0287デフォルトの名無しさん2014/02/12(水) 14:37:20.00
CountBlankでいいんじゃないか
0288デフォルトの名無しさん2014/02/12(水) 14:40:01.25
>>286
それだと1個でも空白セルがあったら非表示になるんじゃ
0289デフォルトの名無しさん2014/02/12(水) 16:22:45.01
>>288
For Each でA1:A10内の各セルを一個ずつ選んで
そのセルのテキストが""だったらセルの行全部を削除する

これは>>283の要求どおりの動作だと思う
02902892014/02/12(水) 16:25:01.52
ごめん、書き間違えた
削除じゃなく非表示だった
0291デフォルトの名無しさん2014/02/12(水) 17:49:50.09
>>289
ああ、行単位でコントロールするのか
If [Counta(a1:a10)] < 11 Then しか見てなかったわ
0292デフォルトの名無しさん2014/02/12(水) 19:19:18.29
そもそも最初のIfって必要か?
1行も消さない場合のがよっぽど多くないと、このロジックだとむしろナノ秒単位で遅くなるだろ
02932832014/02/12(水) 19:43:37.89
>>286
このマクロで思った通りの処理をしてくれました、ありがとうございます。
ですが思ったよりも処理に時間がかかってしまうようです...。

レスを下さった方々ありがとうございます!
0294デフォルトの名無しさん2014/02/12(水) 19:47:46.74
>>293
まとめて処理すればいいよ
もらったコードに手を加えちゃダメってわけじゃないんでしょ?
0295デフォルトの名無しさん2014/02/12(水) 19:56:10.39
>>293
えっ調べるのはA列だけでいいの?だとしたら>>283のコードはなんだったのか…
遅いと感じるならScreenUpdatingを入れればたぶん一瞬で終わるよ
02962832014/02/12(水) 20:26:25.50
マクロを断片的に覚えているので質問や発言がチグハグになってしまい申し訳ありません…。
レスくださった方のものを参考にさせていただいて自分で再度考えてみます。

ご迷惑おかけしました、ROMに戻ります。
0297デフォルトの名無しさん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>
0298デフォルトの名無しさん2014/02/14(金) 19:01:26.24
>>297
スレ違い
0299デフォルトの名無しさん2014/02/14(金) 21:24:22.54
>>297
できてるところまでソース貼って
0300デフォルトの名無しさん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
0301デフォルトの名無しさん2014/02/15(土) 11:58:56.47
質問です
ExcelシートにユーザフォームでDTPickerを貼り付けて、日付をこのカレンダーで
選択すると、フォームがある位置の陰になっているセルにこっそり日付格納して
マクロでその日付を使うように作成しました。
ところがこのカレンダーが動く人と動かない人がいて困っています。
(クリックしてもユーザフォームが固定された状態でカレンダーが表示されない)

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

解決策の心当たりがあればよろしくお願いします。
0302デフォルトの名無しさん2014/02/15(土) 13:34:19.94
>>301
ここにアクセスがインストールされてないとどうたらとか
アクセスが無くてもVBランタイムが入ってれば動くけど
それをエクセルで使うのはライセンス違反がどうたらとか色々書いてある

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

とりあえず月曜会社で試してみますが、これで解決しなかったら本格的に分からないw
03043022014/02/15(土) 14:44:20.37
>>303
その Date and Time Picker Control てのは2007から実装されたんでしょ?
それだと>>301で言ってた「2000で動く」ってのはおかしくない?
03053012014/02/15(土) 15:10:33.32
>>302
言われてみると確かにおかしいですね
でも2kで「動いた」って目の前で見せられたので…

昨日発覚したばかりなので、月曜改めて周囲の状況も含め確認してきます。
0306デフォルトの名無しさん2014/02/15(土) 17:36:08.31
2000と2007って同時にインストールできるんじゃまいか
0307デフォルトの名無しさん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
送料合計 = 送料合計 + 受注生産送料
0308デフォルトの名無しさん2014/02/17(月) 21:54:21.14
上記のような構文の場合、
例えば
送料合計 = 送料合計 + 工場直送送料は
0 = 0 + 500
と、工場直送送料は「500」として計算されると思うのですが
Do Until Cells(行番号, 4) や If Cells(行番号, 6)といった式の場合
なぜいきなり(14 , 4)セルや(14 , 6)セルといったセルに飛ばずに、
ちゃんと一行目のセルから計算されるのかわかりません。
本当に初心者でアホな質問だと思うのですが、答えて欲しいです。
0309デフォルトの名無しさん2014/02/17(月) 22:18:32.41
>>307のプログラムが途中で切れてるから推測だけど単純な入力ミスしてる
0310デフォルトの名無しさん2014/02/17(月) 22:26:13.83
>>308
ステップ実行で1行ごとに各変数の値を確認してみたら?
0311デフォルトの名無しさん2014/02/18(火) 03:36:11.85
むしろ1行目から計算されているというのが勘違いじゃないのか
0312デフォルトの名無しさん2014/02/18(火) 07:28:15.08
行番号にCurrencyを使うな気持ち悪い
0313デフォルトの名無しさん2014/02/18(火) 11:22:50.43
タシカニ
0314デフォルトの名無しさん2014/02/18(火) 14:32:12.07
だな。
IntegerじゃないぞLong使えよ
03152972014/02/19(水) 01:25:10.63
>>300誰か分からないでしょうか…?
0316デフォルトの名無しさん2014/02/19(水) 12:30:10.58
>>315
残念ながらわかりません
ごめんなさい
0317デフォルトの名無しさん2014/02/19(水) 13:51:27.51
>>315
ログインボタンのクリックは
objIE.document.all.btn01.Click
みたいに書く
ページ内にクリックできる場所が複数ある時はボタン番号を適切に変える
「戻る」「入力内容をクリア」「IDをクッキーに保存」とか色々と並んでる場合があるからね

ていうか検索ぐらいしろよ
「VBA IE操作 クリック」みたいなキーワードでサンプルがいくらでも出てくるぞ
0318デフォルトの名無しさん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)), "")"
考えてやってみましたがこれではダメっぽいです。
ご教授いただけると助かります。
0319デフォルトの名無しさん2014/02/19(水) 21:49:24.13
>>318
Worksheets("データシート").Cells(n1, 6).Formula = "=IfError(Hyperlink(VLookup(Cells(" & n1 & ", 5), $Q$:$R$10, 2, True)), """")"

とりあえずこんな感じ?
03203192014/02/19(水) 21:52:23.42
>>318
ダブルクォーテーションをダブルクォーテーションで囲んだ中で使うときは
"" と2個続けるっていうルールになってるよ
0321デフォルトの名無しさん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)), """")"
0322デフォルトの名無しさん2014/02/20(木) 00:46:24.24
>>317
それで番号をひと通り押してみたんですけど
どれもダメでした
>>297のソースコードでもボタン形式でいいのでしょうか?

>>316
丁寧にありがとうございます
0323デフォルトの名無しさん2014/02/20(木) 01:24:13.28
>>322
よくわからんけどinputタグにname=image1って書いてあるからクリックするのもimage1と違う?
0324デフォルトの名無しさん2014/02/20(木) 01:55:37.89
>>317
>>323
すげえええええええ
objIE.document.all.image1.Click
であっさり通りました

ありがとうございます
0325デフォルトの名無しさん2014/02/20(木) 07:29:20.69
>>324
解決してよかったね
でもスレチなんだから今後は余所に行ってやってね
0326デフォルトの名無しさん2014/02/20(木) 09:03:39.96
>>325
このスレでは問題ない
そういうことが気になるなら君が他所へ行きたまえ
0327デフォルトの名無しさん2014/02/20(木) 10:28:54.40
>>326
ですよね
0328デフォルトの名無しさん2014/02/20(木) 19:00:31.77
EXCELファイルを読み込んで、セルのデータを加工するプログラムを作って
いるのですが、文字列、数値、計算式などが入っている普通のファイルなら
期待通り動くのですが、EXCELは多機能ですので、普段全く使ったことが無い
ような機能とか設定がシートやセルなどに追加されていると、自作プログラム
が予期しない動きをするのではないかと思っています。
そのテストの為には、自分でEXCELファイルにいろんな加工を行えば良いわけですが、
自分でも知らないような機能は使うことができません。例えばデータベースとか
テーブルとか、グラフ、フィルターなどなど、まだまだ沢山あります。
そこで質問なのですが、そういうEXCELの機能がてんこ盛りみたいにいろいろ
組み込まれているような何か良いテスト用のファイルって、どこかにありませんか?
0329デフォルトの名無しさん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にすると思った通りの動きになるんですが、なんででしょう?
0330デフォルトの名無しさん2014/02/20(木) 21:17:27.35
>>329
ワークシートでは
Cellsが使えないからエラーになるんじゃないか?
0331デフォルトの名無しさん2014/02/20(木) 21:20:43.09
>>329
そもそもワークシート関数にCellsなんて無いから
0332デフォルトの名無しさん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を使えば良いと思う。
0333デフォルトの名無しさん2014/02/21(金) 07:35:53.62
>>328
あなたにプログラムを依頼した人にもらえばよいと思います
0334デフォルトの名無しさん2014/02/22(土) 01:34:21.73
数式の中で参照のあるツールいじるのこえー

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

=A1の相対参照で行列の挿入して参照がずれる
アンチパターンの整理ができてないわ
0335デフォルトの名無しさん2014/02/23(日) 15:56:19.01
ループ処理について質問ですが

Do Until 親 = 20 '20回ループ


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


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

このようにネストさせる事は可能なのでしょうか?
とりあえず作ってみたら動きませんでしたが出来ると説明されている解説サイトもあるようで
一体どうやって書けば良いのでしょうか?
0336デフォルトの名無しさん2014/02/23(日) 16:27:41.93
>>335
親の二回目のループで 子 の内容どうなってる?
0337デフォルトの名無しさん2014/02/23(日) 16:31:18.92
親も子もゼロに初期化しないといけないんじゃね?
03383352014/02/23(日) 16:32:17.71
>>336
親の計算結果の数値を子に渡して詳細分析を10パターン行うと言ったないようですが
これってプロシージャをわければ解決でしょうか? そんな気がしてきました。
03393352014/02/23(日) 16:34:27.48
>>337
初期化定義はつけてあります。
0340デフォルトの名無しさん2014/02/23(日) 16:52:35.73
>>338-339
ごたくはいいから >>336 を確認しろよ
0341デフォルトの名無しさん2014/02/23(日) 17:15:19.70
>>335
わからないならコードを削らず貼ろう
0342デフォルトの名無しさん2014/02/23(日) 17:45:19.18
>>340
>>341
チェックしたところ子のループ処理が終了したところでVBAの実行が終了いるようで、、 やはりネストは無理か??
0343デフォルトの名無しさん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
0344デフォルトの名無しさん2014/02/23(日) 17:54:51.09
>>336
>>340
>>341
なるほど!!親処理1回ごとに子の変数を初期値に戻さないと子の処理がすべてスルーされているわけですね、修正するとばっちり動きました。
超初歩的な間違いでした。。どうもありがとうございました!
0345デフォルトの名無しさん2014/02/23(日) 17:56:18.66
>>343
ありがとうございますm(_ _)m
0346デフォルトの名無しさん2014/02/23(日) 18:03:05.91
>>344
VBA は変数の初期値が決まってるからいいんだけど、こんなケースもあるから明示的に設定した方がいいよ。
あと、今回の場合なら For 〜 Next 使った方がいいと思う。
0347デフォルトの名無しさん2014/02/23(日) 18:29:53.38
>>346
どうしてですか?
03483352014/02/23(日) 18:33:31.05
For 〜 Next  は使った事がありませんが勉強してみます。ありがとうございます。
0349デフォルトの名無しさん2014/02/23(日) 19:26:51.74
>>347
どこを質問してるんだよ...
0350デフォルトの名無しさん2014/02/23(日) 21:43:02.28
>>349
すみません
後半部分についてです
0351デフォルトの名無しさん2014/02/23(日) 21:54:19.10
ループの回数判ってんだろ?
実行時でないと判らないってんなら Do Unti
の方でないとダメだろうけど判ってんなら
For Nextの方が良いに決まってるl
0352デフォルトの名無しさん2014/02/23(日) 21:57:31.13
>>350
今回みたいな初期化漏れや Parent = Parent + 1 の入れ忘れがなくなるから。
0353デフォルトの名無しさん2014/02/23(日) 22:04:00.80
>>351-352
ありがとうございます
ヒューマンエラーを低減させるためにFor〜Nextの方が良い、ということだったのですね
ちょっと深読みしすぎていたようです
0354デフォルトの名無しさん2014/02/24(月) 20:49:02.56
質問です。

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

VBAでできるに越したことはないのですが、別の方法でもOKです。
よろしくお願いします。
0355デフォルトの名無しさん2014/02/25(火) 07:33:56.81
>>354
インスタンスを生成したあと
コレクションに格納しておいて
ループでコレクションの中身を取得するようにしとけば?
0356デフォルトの名無しさん2014/02/25(火) 09:28:04.02
excel2010

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

フォーム使ったら自動でチェックが入るけど、いらなくなったんで
フォームを解放してついでに参照設定のチェックをoffにしようとしたら
「使用中のコントロールまたは参照を削除することはできません。」
って出るんだけど
0357デフォルトの名無しさん2014/02/25(火) 11:01:09.75
>>356
エクセル2000だけどおなじ症状が出てる
0358デフォルトの名無しさん2014/02/25(火) 15:26:49.43
>>356-357
2007で試したけど、保存して開き直したら消えてる
03593562014/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
0360デフォルトの名無しさん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
0361デフォルトの名無しさん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で表を取り込む方法はわかったのですが
まとめてやる場合はマクロが必要なのでしょうか
参考になるサイトなどありましたらご教示ください
0362デフォルトの名無しさん2014/02/27(木) 14:21:41.96
>>361
ホームページに書いてある内容から必要な部分だけ取り出す方法は色々あるけどVBAを使った方が楽だと思う

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

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

どれも専門的な知識が必要なんで、どこまでわかっているのか細かく確認しながらじゃないと教えるのも大変
■ このスレッドは過去ログ倉庫に格納されています