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

Excel VBA質問スレ Part8

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん2008/08/25(月) 23:16:33
ExcelのVBAに関する質問スレです

前スレ http://pc11.2ch.net/test/read.cgi/tech/1212587819/

★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。

★2 ExcelのVBA以外の部分に関する質問はNGです。
   但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。

★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
   
 VBAとは、『Visual Basic for Application』の略で
  Application
  ├Workbooks
  |└Workbook
  |  ├Worksheets
  |  |└Worksheet
 というApplication以下のオブジェクトを、VB言語で操作するものを指します。 
 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。

★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。

★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
   コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
   ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。

★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
0809デフォルトの名無しさん2008/11/10(月) 19:26:46
>>808
ツールバーにマクロ登録すると
その販売管理ソフトが吐き出したブックをExcelで開いたときにマクロを動かせます。
0810デフォルトの名無しさん2008/11/10(月) 19:30:27
うーんだからマクロっていうのはだなあ.....ってところから説明しないとダメ?
0811デフォルトの名無しさん2008/11/10(月) 19:40:33
マクロが記述してあるだけのブックを用意して
そのマクロをツールバーに登録するんだよ
ネットワーク越しでも大丈夫だし
0812デフォルトの名無しさん2008/11/10(月) 23:38:11
初心者なので、丸投げでお願いします。

application on timeを使って、
開始したら、
a時に処理1をやって、その20秒後に処理2をやって、その8秒後に処理3を
やって、終わる。
というものです。
どうにも、最近、頭が回らなくなって困ってます (~.~)
0813デフォルトの名無しさん2008/11/10(月) 23:48:19
はい次の話題
0814デフォルトの名無しさん2008/11/11(火) 00:02:20
812の追記
処理1は、マクロ1。処理2はマクロ2。処理3はマクロ3と
いうことでお願いします。

0815デフォルトの名無しさん2008/11/11(火) 01:31:29
A1に「08/11/11」と入力されているのをB1に「20081111」と変換させるマクロを作りたいと考えています。

Cで書くと下記みたいな流れになるかなと思うんですが・・・(間違ってるかもしれませんが)

abc ="08/11/11";
sscanf(abc,"%d/%d/%d",&a,&,b,&c);
printf("20%02d%02d%02d",a,b,c);

VBAで書くにはどんな関数使えばいいのでしょう。
08168122008/11/11(火) 01:45:58
自己解決できましたので、
>>812 814はスルーでよろっ。
08178152008/11/11(火) 02:02:40
文字列操作でこうやってみた

                tmpdate_y = CStr(Left(Sheet1.Range("A" & i).Value, 2))
                tmpdate_m = CStr(Mid(Sheet1.Range("A" & i).Value, 4, 2))
                tmpdate_d = CStr(Right(Sheet1.Range("A" & i).Value, 2))
                tmpdate = "20" & tmpdate_y & tmpdate_m & tmpdate_d

スマートじゃねえよなーorz
0818デフォルトの名無しさん2008/11/11(火) 02:09:50
>>815
いったん日付型にしてから書式変換するとラクだと思う
文字列→日付型への変換は cdate()
日付型→書式付文字列変換は format()
詳しくはヘルプ読んでね
0819デフォルトの名無しさん2008/11/11(火) 19:44:30
すいません質問です
エクセルのマクロで
module1内にコード書くのと
sheet1内にコード書くのとでは
動作にどんな違いがありますか?
sheet1から他のシートを対象としたselectionメソッドが失敗するようなのですが・・・
0820デフォルトの名無しさん2008/11/11(火) 19:50:39
訂正)Selection→Select
0821デフォルトの名無しさん2008/11/11(火) 20:51:01
>>445で解決しましたすいません
0822デフォルトの名無しさん2008/11/11(火) 21:15:30
こんばんは
複数のセルの値を一度に比較することってできますか?
Sheet1のA1:B5とSheet2のA1:B5のValueが
同じであるかどうか、が分かるだけでokなのですが。
0823デフォルトの名無しさん2008/11/12(水) 00:20:52
各シートは配列のようにアクセスできるが
0824デフォルトの名無しさん2008/11/12(水) 01:57:12
>>822
配列数式でできるよ
0825デフォルトの名無しさん2008/11/12(水) 05:52:03
Excel2003を使っています。
羅線の太さを調節する方法ってありますか?
できるだけ細くしたいのです。
0826デフォルトの名無しさん2008/11/12(水) 06:21:13
>>825
マクロの記録使って保存すればおk

単純に細くするだけの質問ならスレチ
0827デフォルトの名無しさん2008/11/12(水) 12:48:05
Excel2000:WindowsXP/Pentium4(1.8GHz)/RAM512

セルA1とA2を結合したシートに対して
下記のコードの実行時間は
1回目:13秒
2回目以降:54秒 (Pasteに変更すると29秒)

1回目と2回目以降の違いの理由は何なのでしょうか?

rows(1).select
selection.copy
selection.offset(1).resize(20000).select
selection.insert shift:=xlDown
selection.mergecells = false
selection.delete shift:=xlUp
range("A1").Select

どうやったら速度アップできるか知りたいのですが...
0828デフォルトの名無しさん2008/11/12(水) 12:52:09
羅線ってなんだ?
らせん?
0829デフォルトの名無しさん2008/11/12(水) 13:26:01
螺旋
罫線
新羅
確かに間違える人は居るかも
08308272008/11/12(水) 14:59:51
やりたい事は
シート・アクティブ時にコピー挿入し編集
シート・ディアクティブ時に挿入データを削除(元の状態に戻す)
なのです。
0831デフォルトの名無しさん2008/11/12(水) 15:02:57
> 1回目:13秒
> 2回目以降:54秒 (Pasteに変更すると29秒)

単位、「秒」じゃなくて「_秒」の間違いだよね?
0832デフォルトの名無しさん2008/11/12(水) 15:15:35
秒です。
0833デフォルトの名無しさん2008/11/12(水) 15:17:38
セルを結合していなければ1秒未満です。
0834デフォルトの名無しさん2008/11/12(水) 15:20:33
いや、結合していても_秒でしょ
0835デフォルトの名無しさん2008/11/12(水) 15:34:39
結合云々は関係なく1秒かからんな
データは何かあるのか?

とりあえず高速化のために
Application.ScreenUpdating=False
はやってるよな?
0836デフォルトの名無しさん2008/11/12(水) 15:54:59
新規ブックでセルをマージし、>>827のコードを走らせただけです。
ScreenUpdating, EnableEvent, Calculation等もやってみています。

マシン・スペック(5年前)の問題でしょうか?
0837デフォルトの名無しさん2008/11/12(水) 16:15:36
スペックは漏れのマシンのほうが悪いくらいのはずw
計測方法の問題じゃないか?
0838デフォルトの名無しさん2008/11/12(水) 16:54:32
すまん、Mobile Pentium4の間違いだったorz
0839デフォルトの名無しさん2008/11/12(水) 17:23:09
Mobile Celeron(1200MHz)512MB RAM
Mobile云々は置いといてこっちは1.2GHzなんだよw
OSが2kだからってここまで差は出ないよな?
体感でも1秒以上かかってるのか?
0840デフォルトの名無しさん2008/11/12(水) 17:38:52
excel2003:WindowsXP/Pentium4(2.8GHz)/RAM512
でセルA1とB1を結合して走らせてみたら
1回目:9秒
2回目:40秒

体感で1秒未満は、セル結合無しの場合だけ
0841デフォルトの名無しさん2008/11/12(水) 17:53:33
あぁA1とB1を結合かw
それなら確かに遅くなるな
08428272008/11/12(水) 18:00:26
>>827のA1とA2はA1とB1の結合に訂正願います orz
0843デフォルトの名無しさん2008/11/12(水) 18:03:34
俺の古典的環境だと1回目20秒、2回目1分40秒w
遅過ぎワロタw
0844デフォルトの名無しさん2008/11/12(水) 22:23:38
>>830
どこまでが編集前でどこからが編集後?
編集は .mergecells = false の前?後?
0845デフォルトの名無しさん2008/11/13(木) 09:30:46
*)シート(A1とB1結合)アクティブ時の処理
rows(1).select
selection.copy
selection.offset(1).resize(20000).select
selection.insert shift:=xlDown
'コピー挿入した行に名前を付ける(後で削除の為)

*)コピー挿入したデータへの編集

*)シートディアクティブ時の処理(アクティブ時点の状態に戻す)
'実際にはSelectionでは無く名前で削除
selection.mergecells = false '<- これ無しだと遅くなる為
selection.delete shift:=xlUp
range("A1").Select
0846デフォルトの名無しさん2008/11/13(木) 09:40:02
メモリ1ギガとか積んでいる人だと1回目と2回目の差が無いなんて事ないですか?
0847デフォルトの名無しさん2008/11/13(木) 12:31:54
>>845
了解

多数の結合セルを含む範囲で挿入/削除を続けてやると、後でやる方の処理が遅くなる感じ
メモリ上のシート情報がややこしくなるのかな?1回目をやった後ブックを閉じて開き直すか、
シートコピーでリフレッシュすれば2回目が遅くならないけど、イベント拾うならキツイよね

オレなりに試してみた限りでは、

挿入時: .insert を使わず、2行目以降にデータがあった場合は 20000行ずらした位置へ
      コピーし、狭間へ 1行目を 20000行分コピー
削除時: 最初にシートコピーでバックアップを取っておいて、.cells.copy でコピーし戻す
      ( .mergecells = false もいらない)

ってなやり方が一番早かった。1回目は大差ないけど 2回目が 1回目より早くなる
08488452008/11/13(木) 13:26:06
>>847
有難うございます

挿入処理は、
insertを使わない方法(Paste)は、定義されている名前がある場合面倒そうです

削除処理は、
ご指摘のシートコピーを戻す方式を実際の処理に組み込んでテストしてみます
0849デフォルトの名無しさん2008/11/13(木) 17:21:48
>>848
名前か。それは厄介だ
挿入に insert 使ってコピー書き戻すと名前付き範囲の内容書き変わるし
insert だけでも 2回目は遅くなるし

後は、編集時にシートコピーしたシートを使っといて、deactivate されたら
シートごと削除とかかなあ。イベントあるからいろいろめんどくなるんだよな、、、
0850デフォルトの名無しさん2008/11/13(木) 17:26:26
シートのコピーから戻す方式を試したら更に時間が掛かる様になってしまった
0851デフォルトの名無しさん2008/11/13(木) 18:16:20
>>850
データ量や数式、書式設定その他によってかなり違うだろうね
オレのはあくまで>>827の条件で試しただけだし
0852デフォルトの名無しさん2008/11/13(木) 21:52:40
>>847の処理における名前付き範囲は、挿入時に
range("namedarea").offset(20000).name = "namedarea"
コピーバックの後に .offset(-20000) で、わりと簡単に対応できた
画期的なやり方は見つからんね。構成とか見直すしかないかも、、、
08538512008/11/14(金) 00:13:24
とりあえず、A2:Z3000 をテキトーな数式で埋めて試して見たけど、
やっぱ>>847のが早かった。calculation 切れば数式なしの時とあんま変わんない
とにかく insert (特に 2回目)が遅いんで、insert とコピーバックの組み合わせでは
効果ないかも
0854デフォルトの名無しさん2008/11/14(金) 21:41:28
はじめまして、こんばんは。
今日はじめて本屋にて VBA の存在を知りました。
初心者質問ですみません、例えば、、、これができるようになるとなにができるようになるのですか?
詳しいかた教えてください。
0855デフォルトの名無しさん2008/11/14(金) 22:05:58
>>854
例えば野球データベース
選手名を入力すればその選手のプロでの全成績が一覧表示されるとか

インベーダーゲーム作ってる人もいるよ

とにかくExcelをVBAプログラムで自在に操れるって事
0856デフォルトの名無しさん2008/11/15(土) 19:22:40
>>854
業務で言うと、データベースをexcelに展開して、
色んなチェックプログラムを掛けて品質保証したりとか。
ワークシートで使える関数を作って会社内に配布したり。

excel上に検索エンジン作ってる人もいるし、まぁ、何でもあり。
0857無職カス2008/11/16(日) 02:50:07
みなさん、こんばんは、 >>854 です。
>>855
>>856  さん      返答ありがとうございます。かなり使える機能ですね。
 最近アルバイトをやめました。時間はたっぷりありますのでそこそこ使えるレベルまでもっていきます。
これからVBAを勉強していきます。

多々質問すると思いますが、みなさんよろしくおねがいします。
0858デフォルトの名無しさん2008/11/16(日) 03:45:10
下に全員の成績表があって、
そこから各部門のトップ5を上の小さい表に抽出したいんだけど、
ランクとは違う気がするし行き詰っています。
どなたかご教授願えますでしょうか?
0859デフォルトの名無しさん2008/11/16(日) 05:08:38
officexpのマクロと関数の処理順(と思われる事項)で知恵を貸していただきたく書き込みいたします。

セルAの値によってセルBの値が変わるよう関数を設定しているの状況で、
セルBの書式が自身の値によって変わるようにマクロを組もうとしています。
(書式は4種類以上なので条件付き書式は使えません)

worksheet_changeで書式変更を自動実行するようにしたのですが、
マクロを実行してみるとAの値を変えてもBの書式が変わりません(Bの値は通常通り変わります)
その状況で、まったく関係ないセルCの値を変更するとBの書式が変わったので、
マクロ自体には問題はないようです。

おそらく、A変更→マクロ自動実行→関数でBの値変更、という内部処理があるために
マクロによる変化が見られない状況であると思っています。
(違っているなら根本から考え直さないといけないかもしれませんが)
このような構成の場合、関数による値の変更が反映された後で
書式変更などのマクロが実行されるようにすることはできないのでしょうか?

ご教示お願い申し上げます。
0860デフォルトの名無しさん2008/11/16(日) 10:11:55
Calculate
0861デフォルトの名無しさん2008/11/16(日) 10:51:08
>>860
ご回答ありがとうございます。
5分前にcalculate使えばいいと気づいて、自己解決した旨書きにきたら
既にお答えくださっていたのですね。

初歩的な事でお手を煩わせてしまい、申し訳ございませんでした。
0862デフォルトの名無しさん2008/11/16(日) 19:13:30
>>857
基礎を勉強するには独学でも全然問題ないけど、
プログラム未経験で、かつ仕事に就いてないとなると、
プログラムの基本的な事を理解するまでに半年か1年かはかかると思う。

んで、そこから先は明確な目標が無いと無理。
やれる事が多いんだけど、ぶっちゃけた話、特化したプログラムには敵わない。
例えば>>855でゲームの話が出てたけど、確かに作る事は出来る。

けど、VBAからAPI呼び出してるに過ぎないし、更に言えば
タイムラインって概念がある&ドローツールのFlashなんかには到底及ばない。

ExcelVBAはあくまでExcelの処理系統のプログラムだと俺は考えてる。
Excel上での処理に関してはVBAがぶっちぎり。当然だけどね。

何か目標持った方が良いよ。
0863デフォルトの名無しさん2008/11/16(日) 19:15:00
>>859
calculate使う理由が分からん・・・。
VBAで処理してるなら、VBAでBの値も弾き出せば良いんじゃないか?
0864独り言(ちら裏)2008/11/17(月) 01:24:05
というか、条件付き書式を複数設定(優先順位付)出来ないExcelの仕様に
問題ありかと...
それがExcelのポリシーというのであれば、そういうアプリめいたものを
Excelで作ることが間違いだったということになるか...
0865デフォルトの名無しさん2008/11/17(月) 10:16:53
> 条件付き書式を複数設定(優先順位付)出来ないExcelの仕様に
> 問題ありかと...
という意見が多いので、2007で設定数が 3 から 無制限 に、
優先順位も設定を書き直さずに変更できるようになった。
0866デフォルトの名無しさん2008/11/17(月) 14:02:59
ということで、Excel2007以降の購入をお勧め
0867デフォルトの名無しさん2008/11/17(月) 15:07:26
てゆーか、条件によって変化するセルの書式の種類は3つに留めておく
というのが無難かと
0868デフォルトの名無しさん2008/11/18(火) 00:50:10
>>864
selection changeイベントで好きなだけ設定しろ。
おまいのVBAは飾りもんか?
0869デフォルトの名無しさん2008/11/18(火) 17:07:45
これのFSO(FileSystemObject)使ってテキストデータの読み込みすると文字化けします。
ttp://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110.html
strRECをUTF-8→SJISにエンコードするには、どう記述したらいいですか?
0870デフォルトの名無しさん2008/11/18(火) 20:26:27
質問です。バージョンはexcel2007です。
Dim a As Byte
a = 5
Do Until Cells(a, 5).Value = ""
Cells(a, 3).Interior.ColorIndex = 10
a = a + 1
Loop

cells(a,3)から(a,15)まで同じ処理をしたい場合はどう記述すればいいですか
0871デフォルトの名無しさん2008/11/18(火) 21:16:34
>>869
ADODB.Stream
0872デフォルトの名無しさん2008/11/18(火) 21:23:24
>>870
Dim a As Byte
a = 5
Do Until Cells(a, 5).Value = ""
Cells(a, 3).Interior.ColorIndex = 10
a = a + 1
If a = 16 Then
Exit Do
End If
Loop
0873デフォルトの名無しさん2008/11/18(火) 21:45:15
>>870
byte型宣言はいくらなんでも無いんじゃないかな・・・。
aの使用目的が行数って分かってるんだし、そこはlongに宣言すべきだと思うんだけど。

Dim i As Long
For i = 5 To Cells(5, 5).End(xlDown).Row
Range(Cells(i, 3), Cells(i, 15)).Interior.ColorIndex = 10
Next

短い構文でも同じ処理は出来るんでないかな。
0874デフォルトの名無しさん2008/11/18(火) 22:07:13
870って無限ループじゃないの
0875デフォルトの名無しさん2008/11/18(火) 22:07:40
Range(Cells(5, 5), Cells(5, 5).SpecialCells(xlCellTypeLastCell)).Offset(, -2).Resize(, 13).Interior.ColorIndex = 10
こうか?
0876デフォルトの名無しさん2008/11/19(水) 00:36:24
>>874
255行でオーバーフローで止まる方式
0877デフォルトの名無しさん2008/11/19(水) 08:47:21
>>874の説明でなぜかものすごく納得してしまったw
08788772008/11/19(水) 08:48:08
安価ミス>>876だった
0879デフォルトの名無しさん2008/11/19(水) 10:18:22
>>871
どうもありがとう^^
メモリ不足で四苦八苦してたけど.LineSeparator追加で何とか出来た。ヽ(´ー`)ノ
ttp://www.cocoaliz.com/excelVBA/index/41/
0880デフォルトの名無しさん2008/11/19(水) 10:30:40
Const adLF = 10 宣言しなくても出来ちゃったんだけど問題ないのかな?
0881デフォルトの名無しさん2008/11/19(水) 13:46:56
参照設定したんならいらないでしょ
0882デフォルトの名無しさん2008/11/20(木) 10:23:07
どうして?
0883デフォルトの名無しさん2008/11/20(木) 11:21:57
参照先で宣言されてるから
0884デフォルトの名無しさん2008/11/20(木) 13:59:13
なるほど、
ADODB.Streamが良く分らなくても動いて良かったです^^
0885デフォルトの名無しさんNGNG?2BP(1028)

automation error
The object invoked has disconnected by the client

これ、どうやって解析したらいいの?
ユーザフォームからFiledialogでファイルを開くと 出るんだけど・・・
で、そのうちFM20.dllでメモリアクセスバイオレ〜ションになる
0886デフォルトの名無しさん2008/11/22(土) 20:17:54
CreateObjectでIEのフォーム送信を操作して、
帰ってきたページのリンク先の情報を取得したいと思ってます

Debug.Print objIE.Document.Links.Length で見ると値は4なので
フォーム送信前のリンク先の総数は4だと分かるんですが、
送信後に帰ってきたページのそれの総数(その他もですが)の取得ができません

set objIE = Nothing で一度解放してから再度
CreateObject("InternetExplorer.application") でバインドするだけでは駄目なのでしょうか
"システムエラーです: &H800004005 (-214767259) エラーを特定できません"
というエラーが出てしまいます

あともうちょいの様な気がしますので、どなたかご教示お願いします
0887デフォルトの名無しさん2008/11/22(土) 21:39:47
なんでわざわざ解放するの?
08888862008/11/22(土) 21:43:56
>>887
きちんと取得できるのであればわざわざしないので、
取得方法を教えて頂きたいのですが…
0889デフォルトの名無しさん2008/11/22(土) 22:16:44
>>888
読み込み終わるまでウェイトは入れてる?
08908862008/11/22(土) 22:30:48
>>889
一応前後に1回ずつ入れてます。こんな感じでしょうか
READYSTATE_COMPLETE = 4 をWhie〜Wendでループさせて待ってるので合ってると思いますが…

Debug.Print "objIE.Document.Links.Length = " & objIE.Document.Links.Length ←リンクの数(=4)
Call WaitBrowserResponce ←ウェイト
With objIE.Document.Forms("SQL_FROM") 'フォームにSQLのコマンド(WSQL)をぶち込む
.Item("SQL").Value = WSQL
.submit
End With
'ここでフォーム送信されます
Call WaitBrowserResponce ←ウェイト
Debug.Print "objIE.Document.Links.Length = " & objIE.Document.Links.Length ←こいつが4のまま

ここでリンクの数を再取得(前のページのでなく新しいページのが欲しい)したいのです
08918862008/11/22(土) 22:32:45
念のためIEのウェイト処理をば

Private Sub WaitBrowserResponce() 'IEの処理が終わるまで待機

While objIE.ReadyState <> 4 'READYSTATE_COMPLETE = 4
Debug.Print ".ReadyState = " & objIE.ReadyState
Debug.Print ".Busy = " & objIE.Busy
While objIE.Busy = True
DoEvents
Wend
Wend
Debug.Print "------------------------" ←単なるイミディエイト窓の区切りです

End Sub
0892デフォルトの名無しさん2008/11/22(土) 23:41:05
他のxlsファイルを開きたいんだけど、想定されるフルパスが特定できないので、今開いてるxlsからの相対参照したいんだけど、マクロの記録でやると絶対参照で記録されるよね;;
相対参照ってどう記述すればいいんでしょう
0893デフォルトの名無しさん2008/11/23(日) 06:31:45
>>892
まず、chdir thisworkbook.path で今開いてるブックのフォルダに移動してから

同じフォルダ内なら workbooks.open filename:="Book1.xls"
下のフォルダ内なら filename:="\Folder1\Book1.xls"
上のフォルダ内にある別のフォルダの中にあれば filename:="..\Folder2\Book1.xls"
ふたつ上のフォルダ内なら filename:="..\..\Book1.xls"

んな感じで
0894デフォルトの名無しさん2008/11/23(日) 07:28:29
>>893

すげーーーー!
書き込んだあと、いろいろ探してそれっぽいのは見つけたんだけど、このソースが一番短い!!!ありがとう!!
0895デフォルトの名無しさん2008/11/23(日) 10:14:32
>>886
URLリンク先取得
ttp://www.google.co.jp/search?hl=ja&q=VBA+URL+%E3%83%AA%E3%83%B3%E3%82%AF&lr=
>>892
ファイル検索
ttp://www.google.co.jp/search?hl=ja&q=VBA+File+%E6%A4%9C%E7%B4%A2&btnG=%E6%A4%9C%E7%B4%A2&lr=
0896デフォルトの名無しさん2008/11/23(日) 15:47:12
>>891
ちゃんとループ内に入ってることは確認済?
.readystate が変更される前に飛んで来てたりしてないよね
.document.readystate とか、document_completeイベントとかでのチェックはもう試した?
IE が値を返すタイミングはあんまり信用できないから、いろいろ試した方がいいかも
0897デフォルトの名無しさん2008/11/23(日) 19:12:41
RANGE("A1")の

1を変数にしたい場合⇒RANGE("A" & format(i))というのを見つけたのですが、
Aを変数にしたい場合はどうすればよいでしょうか?
0898デフォルトの名無しさん2008/11/23(日) 20:06:38
>>897
普通に変数を & で繋げばOK

dim a as string: dim i as long
a = "A": i = 1
debug.print a & i      ' ←これでも行けるけど
debug.print a & cstr(i)   ' ←ちゃんと型を揃えたければこっち

つか、cells 使った方が効率いいよ
0899デフォルトの名無しさん2008/11/23(日) 21:01:42
>>898
ありがとうございます
とりあえず、a="A"(列名)を列番号からmid関数で取得して、使ってみます。
09008862008/11/23(日) 22:24:38
>>896
ようやく仕事から帰りました

ループの囲みや最初のreadystateのチェック自体はOKだったのですが、
どうやら2回目以降のループで実際は読み込みが間に合ってなかった模様です

Do
 Do
  Application.Wait Now + TimeValue("0:00:01")
  DoEvents
 Loop Until objIE.Busy = False
Loop Until objIE.ReadyState = 4

として、最低1回以上のウェイトを挟んだ上でreadystateの値が4になるまで
ループを回す事で、きちんと最後まで読み込めるようになりました
0901デフォルトの名無しさん2008/11/23(日) 22:57:44
>>899
なんか回りくどいことするんだね、、、いいけどさ

>>900
オレなら外側のループにも doevents 入れたくなるんだけど、
動いたんならいっかw
0902デフォルトの名無しさん2008/11/24(月) 07:27:53
>>899
cells(1,1).select
ってやってみ。
0903デフォルトの名無しさん2008/11/24(月) 19:35:43
2007を持ってる人に聞きたいんだが、2007のFindメソッドのヘルプの使用例は2003同様間違ってる?
0904デフォルトの名無しさん2008/11/25(火) 01:56:12
VBAでHTML形式のメール送信する場合に使用可能な
フリーのオブジェクトって何があるか教えてくださいエロイ人

BASP21なんかフリーだけど、送れるのはテキストだよね
試しにBodyにHTML書いてみたら、そのままテキストで着ちゃったよママン
0905デフォルトの名無しさん2008/11/25(火) 04:26:56
>>904
basp21 でできるはず
ttp://www.hi-ho.ne.jp/babaq/faq.html#M002
0906デフォルトの名無しさん2008/11/25(火) 08:00:48
>>905
即レスありがとう

ありゃ?これは有料じゃなくて無料でもできるのですか?
ちょっと読んでみても区別がつかなかったので、あとでじっくり読んで見ます。
0907デフォルトの名無しさん2008/11/25(火) 09:34:06
>>903
どっちも同じ。
0908デフォルトの名無しさん2008/11/25(火) 14:17:31
あるwebページをIEオブジェクトで操作して、リンクをクリックさせたら別窓でリンク先が表示されました
今後この別窓のIEオブジェクトを掴んでアクティブにして操作するにはどうすればいいのでしょうか?
文系のなけなしの知識でウィンドウハンドルを取得すればいいと思い当たり、
For Eachで各ウィンドウのそれの取得だけはできました(たぶん)

Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long)
Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long
(中略)
hWnd = GetForegroundWindow
Set objShell = CreateObject("Shell.Application")
 For Each objIE In objShell.Windows
  Debug.Print objIE.hWnd
 Next

ウィンドウハンドルの値は取得できても、アクティブにしたい(操作したい)ウィンドウの
それだと判別する方法が解らないので、どなたかご教示&ご解説お願いします
レス数が900を超えています。1000を超えると表示できなくなるよ。