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


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

Excel VBA質問スレ Part13



1 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 12:25:04 ]
過去スレ
01 pc11.2ch.net/test/read.cgi/tech/1054356121/
02 pc11.2ch.net/test/read.cgi/tech/1168308855/
03 pc11.2ch.net/test/read.cgi/tech/1180192018/
04 pc11.2ch.net/test/read.cgi/tech/1189814602/
05 pc11.2ch.net/test/read.cgi/tech/1197448064/
06 pc11.2ch.net/test/read.cgi/tech/1205231499/
07 pc11.2ch.net/test/read.cgi/tech/1212587819/
08 pc11.2ch.net/test/read.cgi/tech/1219673793/
09 pc11.2ch.net/test/read.cgi/tech/1228372971/
10 pc12.2ch.net/test/read.cgi/tech/1235332603/
11 pc12.2ch.net/test/read.cgi/tech/1241885130/
12 pc12.2ch.net/test/read.cgi/tech/1247566074/

267 名前:257 mailto:sage [2009/10/12(月) 01:14:57 ]
>>261-266
みなさんありがとうこざいます
やはり省略しない方がよさそうですね
確かに単純なプログラムでは問題なくても
複雑なプログラムになるほど後で見て訳分からなくなりそうですもんね
でも
Itemプロパティぐらいは省略してもいいかなと思ってます(^^

268 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 06:01:17 ]
セルの値が数値ならValueじゃなくValue2が普通だから、必然的にプロパティは書くことが多いな。
Itemまで書くとくどいよな。
Worksheets.Item("Sheet1")とかCells.Item(1,1)とかする奴はあまりいないな。

269 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:20:08 ]
             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /


270 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 16:41:04 ]
A1A2・・・に単語が並んでいて
B1B2・・・にグーグルかヤフーのその単語の検索件数を書き入れていくというような
Webクエリは作れないものでしょうか?

271 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:09:44 ]
>>270
そのままでは件数がクエリで取り出せないので、VBAと組み合わせる必要がある

272 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:18:16 ]
VBA使ってどうすればよいのでしょうか?
ぜひ御教授お願いします。数万の単語の検索に途方にくれています>__<

273 名前:デフォルトの名無しさん [2009/10/13(火) 19:14:30 ]
kwsk

274 名前:デフォルトの名無しさん [2009/10/13(火) 19:26:29 ]
ヒントだけでも教えてください。

1つのセルに1つの文字列が入っています。
各行はその文字列の集合とします。
その文字が何文字あるのかと、
各行の文字の全組み合わせ(各行の全部分集合)が全体の中で何個あるのか、
その結果を出力したいのですがどうしたらいいでしょうか?
例えば、
A,B,C,D
A,B
A,B,C
A
このように各セルに文字が入っていたとすると、
全体の中でAは4個、Bは3個、Cは2個、Dは1個あります。
また、組み合わせの個数は全体の中でそれぞれ、
(A,B)は3個、(A,C)は2個、(A,D)は1個
(B,C)は2個、(B,D)は1個
(C,D)は1個
(A,B,C)は2個、(A,B,D)は1個、(A,C,D)は1個
(B,C,D)は1個
(A,B,C,D)は1個となります。

これは具体的な例ですが、実際は何行何列でも何文字でも対応できるように一般化したいです。
意外と難しくてどうしたらいいかわかりませんでした。
こうすればできるだろうという方針だけでもどなたかご教授お願いします。

275 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 21:11:13 ]
A,B,C,D なのに A,C がマッチするのかよ。
Instrで文字列内を検索すりゃ良いんでない?

てか、どんだけの文字数があるのかさっぱりわからん。
無数にある文字種類から検索するとなったら酷い事になりそうだ。

使われてる文字の一覧を作って、それを検索して行くのが良いかもな。
文字種類は無限です。って言うなら、俺は降りる。



276 名前:デフォルトの名無しさん [2009/10/13(火) 21:53:11 ]
>>275
わかりにくい説明で本当すいません。
「A,B,C,D」は1つの文字列ではありません。1つのセルに1つの文字が入っています。
コンマの区切りでセルを表したつもりでした。
「A,B,C,D」の、AはRange("A1")、BはRange("B1")、CはRange("C1")、DはRange("D1")
とに入っています。

実際はAとかBでなく、りんごとかバナナみたいな1つの単語が1つのセルに入ることになりますが。
(A,C)は(りんご、バナナ)という組み合わせだと考えていただけたらわかりやすいかと思います。

使われる単語は無限ではありません。
それでも仰るとおり数が増えれば酷いことにはなりますが、
そこはまた別問題で解決する算段はあります。

(りんご、バナナ)という組み合わせが全体に何個あるか?という話なんです。
わかりにくい説明ですいませんが。

VBAで、ある集合の部分集合を全て列挙するやり方だけでもどなたか
ご教示してくださいませんか?
一応自分でも調べてみましたがわかりませんでした。

277 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 22:05:47 ]
>>274
ヒント モリケン

278 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 22:12:31 ]
>276

275氏も書いてるがInStrでOK。

にしても説明ヘタだな、君は。

279 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 22:29:15 ]
人に判り易く自分のやりたい事を説明するっつーのも訓練が必要っすよ。 w

他人には(特に掲示板なんかでは)質問者のレベル・環境、そして何をどうしたいのかなんて判らないのだから。

(ここはExcel VBAスレだから或る程度は限定されてるけど)



280 名前:デフォルトの名無しさん [2009/10/13(火) 22:33:33 ]
>>275-279
すいませんがんばってみます。
サンプルでもうpすればわかりやすかったかも・

281 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 23:35:10 ]
1列に必ず同じ文字が入るなら簡単だろ。
この場合は4文字だから、組み合わせは
4C4=1
4C3=4
4C2=6
の11種類しかない。
組み合わせの形がわかるから、その組み合わせを順に行毎にループすりゃいい。



282 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:28:23 ]
270です。
VBAはかなりいろいろできるようになったのですが、ネットにつなぐスクリプトは
挑んだことがありません。またどうやってヤフーやゴーグルのデータを取り込んで
加工するかがわかりません。
一単語ごとに検索して検索数をコピペする作業は300ぐらいこなすとぐったりです。
どうすれば自動化したいのです・・・

283 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 11:04:49 ]
まずは日本語でどうぞ。

>1 ★5

284 名前:283 mailto:sage [2009/10/14(水) 11:06:50 ]
>2 ★5

だった;;

285 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 11:09:03 ]
データ→Webクエリ(で対象のアドレスを入れて)でシートに取り込むのをマクロで記録すればOK


ただし、こっからが問題ありでヤフーやらぐーぐる(だろ?w)が仕様変更でレイアウトなどを変更したら、それに合わせて
修正必須になる



286 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 11:13:47 ]
>>282
とりあえずヒントだけ。(環境依存な部分があるので、このままじゃ動かない)

Sub 件数取得()

  kw = "ぬるぽ ガッ"

  Set ObjHttp = CreateObject("Microsoft.XMLHTTP")
  ObjHttp.Open "GET", "www.google.co.jp/search?hl=ja&q=" & kw, False
  ObjHttp.Send
  src = StrConv(ObjHttp.responseBody, vbUnicode)
  Set ObjHttp = Nothing

  src = Mid(src, InStr(InStr(src, "id=resultStats") + 24, src, "<b>") + 3)
  src = Left(src, InStr(src, "</b>") - 1)

  Debug.Print "「"; kw; "」のヒット件数="; src

End Sub

287 名前:デフォルトの名無しさん [2009/10/14(水) 12:34:58 ]
質問させてください。(Ecel2003)

複数のセルをcsv形式で文字列変数に格納したいのですが、
Webで探したら1セル+","を繰り返す方法しか見つかりません
でした。

実際試して見ましたが対象セルが数万あるので処理に非常
に時間が掛かっております。

Joinなどを利用して一括で行うなど、高速化の手段は無い
のでしょうか?
(対象セルは矩形で表現できます)

ちなみに最終目的は複数のBookのある範囲のセル値を1つ
のcsvファイルにまとめることです。

よろしくお願いします。

288 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 12:41:09 ]
>>287
あくまでも想像だけど、時間がかかっているのは、たぶんセルの内容を1つずつ読み出してるから。
配列に一気に読み込んでから処理すれば、もっと速くなるはず。

289 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 13:01:44 ]
>>287
Join関数は一次元配列しか指定できないから、二次元から一次元への変換部分だけは
自分で工夫して作るしかない。

290 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 13:11:04 ]
>>288
違うと思うよ。
単純に連結すりゃだんだんサイズが大きくなってメモリに入りきれなくなり別のメモリ領域をしょっちゅう探して確保しなきゃならないから時間がかかるんだ。
昔は必要なサイズの文字列を用意しておいてMidステートメント(関数じゃない)ではめ込んでいくのが常道だったが、今はJoin関数があるから楽だな。

291 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 14:21:33 ]
>>286
神様ありがとうございます。
どういうふうな勉強をされたのでしょうか。ネットワーク関係のお仕事など
されているのでしょうか。参考になる本などを教えていただけるとうれしいです☆
ありがとうございます。

292 名前:287 mailto:sage [2009/10/14(水) 14:26:52 ]
回答ありがとうございました。

一次元に変換してJoinでやってみます。

293 名前:287 mailto:sage [2009/10/14(水) 15:53:51 ]
度々すみません。
追加で質問させてください。

先の件は一次元にしたら体感で数十倍以上早くなりました。
ありがとうございました。

文字列変数に格納したデータをcsv形式で保存すると、期待した
結果が""で囲われたcsvファイルが出来上がりました。

(以下サンプル)
"1,2,3,4,5,
1,2,3,4,5,
"

この先頭/末尾の「"」を入れたくないのですがどうすれば良い
のでしょうか?



294 名前:287 mailto:sage [2009/10/14(水) 16:26:40 ]
自己解決。

出力をWriteで行っておりましたがPrintに変えたら希望通りとなりました。
違いがよっく分かりませんが解決しましたのでご報告します。

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

295 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 16:27:54 ]
>>293
csv形式で保存するんじゃなくて、テキストファイルに出力する



296 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:05:17 ]
動的配列について質問なのですが
googleで検索などしたところ

Dim aaa() as string

など()のみで宣言したアトに

ReDim aaa(0 to 10)

のように範囲を指定して使う。みたいな例しか検索できませんでした
しかし、範囲を指定して使うならそれはすでに動的ではなく静的じゃないか
とずっと頭を抱えているのですが

要素数不明の配列を扱うことは無理なのでしょうか?

配列にデータを入れる際に、データ数カウントしながら入れて
その後ReDimすりゃいいってことですかね??

297 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:10:03 ]
と思ったら、データを入れる段階で「インデックスが範囲外」的なエラーでましたorz

入れる前に範囲決めろとか無茶なんですが・・・そういうのはvbaじゃ無理ですかね?

298 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:17:59 ]
>>296
あとから何度でもサイズを変更できるというのも一種の動的。

>>297
インデックス値を変数に入れておき、データを入れる前に、そのインデックス値を使って
配列をどんどん拡張していけばいい。
ただしReDimを使うと配列の中身がクリアされてしまうので
データを保持したままサイズを変更するにはReDim Preserveを使う必要がある。
VBAでは一般的なテクニック。

299 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:20:39 ]
>>286
繰り返し処理をしていたら400ほどでデータがなくなりました。
ブラウザでグーグルを見ると、あなたは拒絶しますのような画面が出てグーグル
使えなくなりました・・・
どうすれば・・・・・

300 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:23:17 ]
We're sorry...

301 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:25:33 ]
>>299
しばらく待つ

302 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:29:09 ]
>>299
そのサンプルはOpenでコネクションが開きっぱなしだから、まずは1回ごとにCloseしてみ
あとは、まあ連続アクセスは避けるとか。たとえば10秒間隔でアクセスするよう修正してみる

303 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:46:57 ]
Google にクエリを送信すること
をしてはいけないということです・・・

世界のグーグルを怒らせてしまって・・・

304 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 18:10:25 ]
We're sorry...
... but your computer or network may be sending automated queries.
To protect our users, we can't process your request right now.

See Google Help for more information.

305 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 18:48:06 ]
>>298
アドバイスありがとうございます

要素数をuboundで数えて、残り少なくなったら配列を拡張するという方法をとってみました
とりあえずはこれでなんとかなりそうです



306 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 23:45:51 ]
>>305
そんなファジーな使い方をw
かっちりと要素数取得すれば良いんじゃないか?

307 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 00:12:46 ]
>>299
別に質問でも回答でもないんだけど・・・
グーグルをそういう使い方したらいけないというのがわかって為になったわ

308 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 03:17:58 ]
ボクも、>>286のプログラムを使ってみた。
kabutomo.net/img.php?filename=dc_740000_1_1255544121.png

309 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 08:30:17 ]
299です。
復旧しました。復旧にはゆがんだ画像の絵のなかの文字を入力
させる画面が二回出てきて、復旧。その後、何回かグーグルを
普通に利用したところ、またゆがんだ絵の文字を入れろと・・・
すっかりブラックリストに載ってしまったみたいです・・・・・

英語グーグルにアクセスしても同じことで、違うのは、
送信ボタンが、I'm human と書いてあるところでした・・・
かなりこわい経験でした。400か500連続で、ストップというところ
でしょうか。気をつけてください。

それにしてもあなたはグーグルとのこの契約を知っているでしょう
とは・・・・

310 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 08:59:36 ]
やはりあなたは検索しすぎです
ばいばいおさるさんw

311 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 11:06:57 ]
>>309
ここから先はネットサービス板あたりの領域かな。
Googleの検索は1時間あたり何回までが限界とかそういうのをきちんと調査した上で、
それを越えないようなプログラムを工夫して作ることになる。

312 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 11:30:00 ]
ありがとうございます。頼っていたサービスなので非常に怖い思いをしました。
なんか世界から拒絶されたような・・・
手で作業するよりも早ければそれでいいです。一分に5つぐらいのペースのを
つくってみます。一月ほど休むことにします。
プログラマー向けのページには一日5000までとは書いてあったのですが・・・
ヤフーは5万までみたいです。

313 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 12:03:54 ]
外部にproxy用意して色んなIPから接続してやるのが定番

314 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 12:11:35 ]
外部にボットを用意して色んなPCから接続してやるのはどうでしょうか。

315 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 12:41:52 ]
ボットってか
もう
googleを攻撃しないであげて



316 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 13:47:02 ]
なるほど良く考えたらスクリプトアタックか

317 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 14:58:17 ]
OS:XP EXCEL2003、2007にて
Ctrl+6 や Ctrl+7といった数字のショートカットキー
を禁止にする方法はありませんでしょうか?
検索しても回答がなく、OnKeyでも拾えないので
困っています。

318 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 18:03:21 ]
VBAとどのような関係が?

319 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 20:53:16 ]
>>318
VBAでそのキーを押した際の処理を無効化したいんでしょ。

320 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 21:27:48 ]
フックは簡単にできるでしょ。

と思いやってみたが本当に拾えないな。
APIにあったと思うけど、スレ的にどうなんだろ。

321 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 22:20:20 ]
カーネルに入ってなかったっけか。

322 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 22:23:40 ]
結構前まではAPIの話題が出ただけで拒否反応する人はいたな
ライブラリ参照したりAPI使うのはエクセルVBAの構築手段として十分範囲内だと思うけど
API自体の話でもなければ

323 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 13:30:41 ]
グーグルって自分ではロボットつかいまくってるのに自分には使わないでというのは
やっぱりおかしいわ

324 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 15:39:10 ]
>>323

325 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 16:25:15 ]
XP SP3
EXCEL2002

現在、クライアントPCのファイルをデスクトップ上にあるイントラネットショートカットアイコンに
ドラッグアンドドロップでファイルをアップロードしているのですが、
クライアントPCのファイルをイントラネットにアップロードする事はVBAで処理可能でしょうか?




326 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 17:57:05 ]
VBAでTCP/IPって話は難しいとおもうが
VBAでイントラネットショートカットアイコンにドラッグアンドドロップ相当の
作業を行うのは幾分は簡単かと思う

327 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 20:17:36 ]
>325
ショートカットアイコンは
何処へのどんなショートカットなの?

サーバとかの共有フォルダへのショートカットなら
VBA使わなくてもって気もするが
あえてVBAなら
FileCopy すればいいだけのような気がするのだけど
そのへんどうなの?

328 名前:デフォルトの名無しさん [2009/10/16(金) 20:48:18 ]
質問させてください。

Excel2003ですが、任意の文字列を配列の中から検索して
インデックス番号を返すような処理はどのように行うのでしょう
か?

任意の文字列は必ず配列の中に完全一致で存在します。
また配列内に重複する文字列はありません。

myArray(0)="あああ"
myArray(1)="いいい"
myArray(2)="ううう"
myArray(3)="えええ"
myArray(4)="おおお"

の場合、"ううう"をキーにすれば2を求めたいのですが、配列
を回して比較する程度しか思いつきません。
Findメソッドなどで実現できないでしょうか?

よろしくお願いします。

329 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 21:38:56 ]
>>328
残念ながらVBAだけで一発で検索する方法はない。
検索を第一に考えるなら、2次元配列にデータを入れておき、
必要に応じてワークシートに転送してからワークシート関数で検索するという方法がある。
文字列の長さがすべて一定ならJoinで1つの文字列にまとめてから位置を調べるという手もある。

330 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 21:41:08 ]
>>328
目的によってはDictionaryオブジェクトが使える場合もある

331 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 21:49:56 ]
System.Collections.ArrayList

332 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 22:03:32 ]
配列がとても大きくて順次比較していては時間がかかるって言う事なら
配列のキーの部分が 昇順または降順でソートされているという条件で
古典的なバイナリサーチ手法を使えぱ時間は短縮できる

333 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 22:08:25 ]
ハイルデータが固定で数が多くないとか、なら連想配列だろうなあ
データ入力時に連想セットできたりするかね

334 名前:328 mailto:sage [2009/10/16(金) 22:37:34 ]
回答ありがとうございます。

フォルダ内にYYMMDD.xlsというファイルが複数あり、それをソートして
格納してある配列があります。
コンボボックスから2つのファイルを選択したらその期間内のファイルに
対して処理を行うことが目的です。

インデックス番号を取得してFor〜Nextの初期値と最終値にしたか
ったので質問させていただきました。

対象ファイル数は100以下です。
後のメンテを考え、素直に全数比較して新たな配列に格納する
方法で対応してみます。

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

335 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 08:07:18 ]
>>334
要素数が65536以下ならWorksheetFunction.Matchが使える。
この関数でバイナリサーチも出来るが、要素数が65536も超える場合も考慮するなら自前の関数書いた方がいいな。
要素数がたった100以下ならバイナリサーチじゃなくても無問題だけどな。





336 名前:325 mailto:sage [2009/10/17(土) 10:22:18 ]
>>326
D&D相当の作業、是非教えて頂きたいです。

>>327
ショートカットアイコンは通常のフォルダアイコンに地球の絵が描かれています。
FileCopyで試すと「パス名が無効です」
FS.CopyFileで試すと「ネットワークパス見つかりません」とエラーが出ます。
パス名は"\\サーバ名\フォルダ"」と間違いないと思うのですが・・・・

337 名前:327 mailto:sage [2009/10/17(土) 11:16:11 ]
>>336
「パス名が無効です」 だと共有フォルダ名が間違っている可能性があるけど
確認した?
エクスプローラでそのサーバーが見えるなら パス名確認した方が良いかも

FileCopyは
 FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\test.txt
 FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\フォルダ名\test.txt
とかでいいはすなんだけど

サーバー系は、ここ数年やってないんで最新バージョンなんかで仕様が変わっていたら
お手上げですが....

338 名前:337 mailto:sage [2009/10/17(土) 11:19:58 ]
あっチョット訂正

FileCopyの構文で 最後の " が抜けてた
 FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\test.txt"
 FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\フォルダ名\test.txt"
です
失礼しました (^^汗

339 名前:325 mailto:sage [2009/10/17(土) 14:59:31 ]
>>337-338
パス名は何回も確認しました。プロパティーからコピペしたので間違えてないはずなんですが。
エクスプローラーのプロパティではパス名「http://サーバ名/フォルダ名」なんで、
「http:」外して/を\に変えたんですけど、根本的に間違ってるんでしょうか。

あと、補足ですがサーバはSharePointのワークグループです。



340 名前:327 mailto:sage [2009/10/17(土) 15:16:03 ]
>>339
プロトコルがhttpなら
>>337の方法は使えないね

341 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 17:01:58 ]
createobject("shell.application").namespace("http://サーバ名/フォルダ名").copyhere "c:\temp\test.txt"

342 名前:325 mailto:sage [2009/10/17(土) 17:12:19 ]
>>340
やっぱそうなんですね。
xlsやSLK形式のデータはVBAで上書き保存出来たので、試行錯誤してみたんですが残念です。

>>341
ありがとうございます。試してみた所エラーは出ませんでしたが、コピー出来ていませんでした。
どこか違う所にコピーされたんでしょうかね(゚ー゚;Aアセアセ

343 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 17:35:43 ]
CreateObject("WScript.Network").MapNetworkDrive "Z:", "http://サーバ名/フォルダ名"
FileCopy "c:\temp\test.txt", "z:\test.txt"

344 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 17:43:22 ]
>>341
非同期なのかも
msgbox "ちょいと待つ"

345 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 17:50:48 ]
>>339
sharepointはブラウザ上でみるとhttp://〜のリンクだけど、実際はWEBDAVでやりとりしてるよ。
http://〜のアドレスをコピペして、新しいブラウザに入力してファイルを開いてみ?
読み取り専用になるから。
対して、\\鯖名\〜だと読み書きできる。
「webdav vba」 で検索すると幸せになれるかも



346 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 11:54:53 ]
excel2007です

vbaに登録されている(?)errの一覧を知る方法は無いでしょうか?

ループ内でロジックエラーが発生した時にerrに数値を設定してexitさせようと思ってるのですけど
その時にExcelに既に定義されているのとぶつかったら不味いかなと思いまして。


347 名前:346 mailto:sage [2009/10/18(日) 12:04:34 ]
自己解決

Raise メソッドに
Visual Basic のエラー (Visual Basic の組み込みのエラーとユーザー定義エラー)
は、0 〜 65535 の範囲の値です。0 〜 512 の値はシステム エラー用に予約されてい
るため、ユーザー定義のエラーに使用できるのは、513 〜 65535 の範囲の値です。
クラス モジュール内で独自のエラー番号を設定するときには、エラー番号を定数
vbObjectError に追加します。たとえば、エラー番号 1050 を発生させるには、名前
付き引数 Number に vbObjectError + 513 を割り当てます。

とありました。スレ汚しすんません

348 名前:デフォルトの名無しさん [2009/10/18(日) 21:13:43 ]
VBA初めて作る初心者です。 土日をほぼ丸で使っても解決できませんでした。誰か助けてください。もしくは土日を返してくれ・・・。

目的 あるURLをIEで開き、全てを選択してエクセルに貼り付ける。



Sub ie_test_ExecWB()

Dim objIE As Object

Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "google.com"

Do While objIE.Busy = True
DoEvents
Loop

objIE.SendKeys "^a"
objIE.SendKeys "^c"


Range("A1").Select
ActiveSheet.PasteSpecial Format:="HTML"

End Sub

実行すると、
実行時エラー’-2147417848(80010108)':オートメーションエラーです。
起動されたオブジェクトはクライアントから切断されました。
と表示されます。 objIE.SendKeys "^a"objIE.SendKeys "^c"
ではなく、objIE.ExecWB 17, 0 objIE.ExecWB 12, 0でもダメでした。

349 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:33:33 ]
ほれ土日だよ

350 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:36:25 ]
>>348
IEオブジェクトに SendKeys メソッドはないんじゃないの?
そんなことをしなくても、指定のページが開いたら

objIE.document.body.innerText

とすることで現在表示中のページのテキストを文字列として取得できる

351 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:44:59 ]
メッセージからすると
Do While objIE.Busy = True
でエラーになってて開けないんだろ

352 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:03:22 ]
>>348
ほい

Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long

Sub ie_test_ExecWB()
  Dim objIE As Object
  Set objIE = CreateObject("InternetExplorer.application")
  objIE.Visible = True
  objIE.Navigate "google.com"
  Do While objIE.Busy = True
    DoEvents
  Loop

  If SetForegroundWindow(objIE.hWnd) Then
    SendKeys "+{TAB}^a^c", True
  End If
  Set objIE = Nothing

  Range("A1").Select
  ActiveSheet.PasteSpecial Format:="HTML"
End Sub

353 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:03:35 ]
>>348
ではあなたの月火をわたしにください
そうすればあなたに土日をさしあげましょう


354 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:17:16 ]
月火だよー
火憐だぜ

355 名前:348 [2009/10/18(日) 22:21:19 ]
>>350~352

神々・・・!
ありがとうございます。

現在>>352様が提供してくださったコードで試していますがうまくいきません。
実行するとクリップボードにあるものがA1に貼り付けられてしまいます。

IEが起動するときに、googleのサイトと空のIEが二つ起動してしまうのですが
これが原因なのでしょうか?

ちなみにVISTA,IE7,officeXPという環境です。


>>353
わかりました。
私のカレンダーから月火を捕まえる為の縄を下さい。



356 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:21:22 ]
>>352
>ほい
だってw

357 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:22:58 ]
保護モード Navigateでぐぐれ

358 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:33:05 ]
>>355
わざと後出ししたな

359 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:41:16 ]
Webクエリをマクロで記録は気に食わないのか?
Sub Macro1()
With ActiveSheet.QueryTables.Add(Connection:="URL;www.google.co.jp", _
Destination:=Range("$A$1"))
.Name = "www.google.co.jp"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub

360 名前:348 [2009/10/18(日) 22:41:33 ]
>>356
だめか?

>>357
保護モードを解除したがだめです。

>>358
すまん




361 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:45:47 ]
webbrowserコンポーネント使えば?

362 名前:348 [2009/10/18(日) 22:48:17 ]
金曜日の夜からVBAを触り始めまして、WEBクエリという単語は何度か目にしましたが
スルーしてました。

これだとテキスト形式での貼り付けになってしまいますね?
ページを丸ごとコピーして(HTML、画像も)貼り付けたいのです。
できるのかな?ちょっとクエリについて勉強してみます。

残り73分で!

363 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:03:06 ]
OSとIEのバージョンを後出しされてしまったでござるの巻

364 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:06:24 ]
> ちなみにVISTA,IE7,officeXPという環境です。

正直言おう
その環境を再現して動作確認するのが面倒

365 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:11:07 ]
VistaにIE7にOfficeXPって、わざといらない子ばかり集めて何してんの?何かの罰ゲーム?



366 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:17:04 ]
Webクエリで画像まで取り込む方法ってあったっけ?

367 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:24:31 ]
>>348
VBA初めて作る初心者です


初めてでIEからデータ取得なんてできるわけないし、
ここにソースを貼ってもらっても使いこなせるわけ無い


むだ






[ 続きを読む ] / [ 携帯版 ]

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

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