Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net

レス数が1000を超えています。これ以上書き込みはできません。
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part46 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1487342545/

※関連スレ
VBAなんでも質問スレ Part2
http://echo.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://echo.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 125
http://echo.2ch.net/test/read.cgi/bsoft/1481369538/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

おつ

3デフォルトの名無しさん (ワッチョイ bfb2-lHz+)2017/03/15(水) 16:03:44.51ID:qp+ADeck0
1おつ

おつかれーしょん

それでは宿題をどうぞ

今どき
Application.ScreenUpdating = False
なんてしないよね?

するよ?
ただExcel2013,2016対策でその一文で済まないことが出てきたけど・・・。

>>6
するでしょ
セルへの書き込みいちいち描写すんの?

>>7-8
最近では自分はほとんどしなくなった
要所要所でしか書き込まないからちょうどいい進捗確認になる。

10デフォルトの名無しさん (アークセー Sx57-HNYZ)2017/03/15(水) 20:42:29.87ID:SxG8JjnMx
>>6
そうね
recordset張り付けがほとんどだから

11デフォルトの名無しさん (ワッチョイ f364-aizu)2017/03/15(水) 22:06:14.60ID:8JhP7Jbn0
確かに高速化する過程で描画とかあんまり関係無くなるよな
でも昔作ったクラスを流用してるから計算と警告止めるついでに描画が止まる

12デフォルトの名無しさん (ワッチョイ f73c-N544)2017/03/15(水) 22:35:50.60ID:9x7Uk/iK0
まあ確かにあんまりパチパチ書き込みせんな
めんどくさくて適当に作ったときは使う

13デフォルトの名無しさん (ワッチョイ f27b-B7n4)2017/03/15(水) 22:59:51.14ID:SQ1wYD/X0
前スレ>>988
>最新のプログラミング技術って今は何なんだろうな。

操作するだけで勝手にプログラムを書いてくれる技術。
これ以上のものはないんじゃないの。

14デフォルトの名無しさん (ワッチョイ f73c-N544)2017/03/15(水) 23:17:02.77ID:9x7Uk/iK0
>>13
マクロの記録か!?

15デフォルトの名無しさん (ワッチョイ bfb2-lHz+)2017/03/15(水) 23:27:52.02ID:qp+ADeck0
>>14
実は20年前にExcelは時代の最先端を進んでいたということかっ!?

16デフォルトの名無しさん (ワッチョイ 323c-ZZsN)2017/03/15(水) 23:53:07.36ID:FiGu7lnE0
マクロレコーダーならEmacsやVimのほうが歴史が古いと思うぞ

17デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/16(木) 02:30:58.40ID:BRJmk+vj0
>>16
プログラムコード書いてくれたっけ?

18デフォルトの名無しさん (スプッッ Sddf-Ma5U)2017/03/16(木) 09:36:54.17ID:CmubgaKBd
モジュールのエクスポートってエクスプローラにドラッグ&ドロップするだけでいいんだな。
今まで律儀にプロジェクトから右クリックメニューからエクスポートしてたわw

マジかw
めっちゃ便利じゃねえか!
もしかしてインポートも?

20デフォルトの名無しさん (スプッッ Sddf-Ma5U)2017/03/16(木) 11:50:16.42ID:CmubgaKBd
>>19
Yes.
さっき多数の.basモジュールをExcelからPublisherに移動させるときに気づいた。

21デフォルトの名無しさん (ワッチョイ 33b2-ns4E)2017/03/16(木) 15:58:53.62ID:wlBz8l330
質問です。
今日になって、いつも使用しているマクロの途中でExcelがハングアップするようになりました。

環境はWindows 7 pro 32bit、Excel 2010
発生するタイミングをトレースしたところ、Workbook.Open()メソッドでした。

全体的なフローとしては、
 001.xlsxを読取専用で開く
 →データを解析
 →閉じる
 →条件を観たした時、001.xlsxを書き込み可で開く※ココでエラー発生
となります。

・閉じた後のメモリの開放が不完全なのかと思い、Set WB = Nothingをしましたが効果はありませんでした。
・2回目に書き込み可で開く直前に、001.xlsxを空の新規ファイルに差し替えましたが、同様のエラーが出ました。
・他のPCも同様にダメでした。
 (Windows10 Excel2016で試した場合はハングアップしない代わりに、Open直後でマクロが強制終了されたかのような状態になりました。)

※初回は大人の事情でどうしても読取専用で開く必要があります。
※関係あるかは不明ですが、昨日Windowsの更新がありました。

皆様の知恵をお貸し下さい。よろしくお願い致します。

22デフォルトの名無しさん (ワッチョイ cf42-9jmm)2017/03/16(木) 16:20:35.41ID:p/OuygEJ0
とりあえず、簡単にこれとか試すのは?
これが通るなら元の2行目の何かがいけない。


001.xlsxを読取専用で開く
→ たとえば1+1を計算して見る
→閉じる
→001.xlsxを書き込み可で開く

とりあえず困った時はdoeventsを間にかます
nothing の次ぐらいに書いてみたらどないだ?

24デフォルトの名無しさん (ワッチョイ efa6-tpgq)2017/03/16(木) 16:50:01.07ID:FSeN9Ukg0
質問です
VBEでマクロを修正後実行しても再コンパイルされず
修正前のものが実行される時があります
強制的に再コンパイルさせる方法ってないでしょうか

25デフォルトの名無しさん (JP 0H7f-v8EU)2017/03/16(木) 17:19:28.88ID:tDvUwYEMH
>>24
> 修正前のものが実行される時があります
気のせいだと思うけど、もし本当にそうなら、VBEのメニューの「デバッグ->VBAプロジェクトのコンパイル」でコンパイルできる。

26デフォルトの名無しさん (ワッチョイ efa6-tpgq)2017/03/16(木) 17:58:10.29ID:FSeN9Ukg0
>>25
ありがとうございます
メニューの目の前にあったとはw はずかしい

時々エラーを修正してもエラーが続いて「なんでだーー」と嵌り、
再コンパイルされてないとやっと気づいでexcelの再起動で対処
面倒くさくていらついていました

27デフォルトの名無しさん (ワッチョイ 33b2-ns4E)2017/03/16(木) 18:16:32.83ID:wlBz8l330
>>22
書き忘れて申し訳ないのですが、上記の処理を連番になっているファイルに対して順番に実行するようになっており、処理する順番を色々並び替えた結果、発生する周回数はランダムで一定以上重い処理が続いた後に起こる傾向がありました。
一応空のファイルを100個用意して回してみましたが、軽い計算では発生しませんでした。
>>23
なるほど!DoEventを試してみます。

28デフォルトの名無しさん (ワッチョイ 33b2-ns4E)2017/03/16(木) 18:21:45.32ID:wlBz8l330
>>26
変数を未定義のまま実行して、デバッグ中に未定義だった変数を定義すると停止しても永久にエラーが出るようになるね。
やってしまったら、エクセル再起動か該当の変数を使ってるマクロを切り取りして一度コンパイルを通す必要があってめんどくさい。
だから実行前には必ず手動でコンパイルするような癖がついたわ。

29デフォルトの名無しさん (ワッチョイ bf85-12+v)2017/03/16(木) 19:06:57.17ID:PUp87fRB0
コンパイルっていうけどさ、それで何か実行ファイルが出来るっていうわけじゃないよね?
文法エラーや未定義の変数のチェックには役に立ってるけど

30デフォルトの名無しさん (ワッチョイ efa6-tpgq)2017/03/16(木) 19:08:33.20ID:FSeN9Ukg0
>>28
マジですか
未定義でばっと作ってデバッグ修正、後から定義することがよくあるのできっとそれですね
うちのシステムがおかしくなってきてOSの再インストールが必要かと思ってました

>>21 開けないファイルを右クリック→プロパティ→ブロックの解除

32デフォルトの名無しさん (スプッッ Sddf-Ma5U)2017/03/16(木) 19:40:30.59ID:CmubgaKBd
VBAで未定義変数の問題なんてあるの?
必ず初期値は決まっていると思ってたけど。

33デフォルトの名無しさん (ワッチョイ bf85-12+v)2017/03/16(木) 20:01:38.98ID:PUp87fRB0
>>32
Option Explicit を付けたら変数の宣言を強制されるよね。それでその変数のスペルミスをすれば当然エラーになるよね
少なくとも俺はそのつもりで書いているんだけど

34デフォルトの名無しさん (スプッッ Sddf-Ma5U)2017/03/16(木) 21:47:46.14ID:CmubgaKBd
>>33
ああ、宣言してないってことか。
未定義を未初期化の意味にとってた。
スマソ

35デフォルトの名無しさん (ワッチョイ bf7b-WisJ)2017/03/16(木) 22:34:03.38ID:x5pnev3p0
>>25
マジであるよ。

俺の場合、「Msgbox ""」の文を行ごと消したのに、
延々メッセージボックスが出続けた事があった。
保存して開き直したら直ったけど。

36デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/16(木) 22:59:37.95ID:2FaryFSh0
>>35
それってステップ実行したらどうなるんだろう
幽霊が出てくる?

37デフォルトの名無しさん (ワッチョイ bf3c-y/cv)2017/03/16(木) 23:53:38.39ID:OzitRQy30
>>19
キーボードショートカットありますよね?

38デフォルトの名無しさん (ワッチョイ bf3c-y/cv)2017/03/16(木) 23:59:48.26ID:OzitRQy30
>>17
プログラムコードの線引きをどこでしてるのかわからないけどExcelで実現できてることと同じだよ

39デフォルトの名無しさん (ワッチョイ 0364-12+v)2017/03/17(金) 02:10:26.92ID:wFMeanHH0
一時期、「仕様書書くだけでプログラムを自動生成してくれるソフト」みたいなのが夢物語として頻繁に語られた事あったな。
「金が無限に湧いてくる壺」みたいなもんで、本質的にあり得ないし、あったとしても誰にも公開しないだろっていう。

>>38
> Excelで実現できてることと同じだよ
違うでしょ
> たとえば現在行を消してキルリングに入れるにはC-a C-k C-kを使います。
の操作は
> (fset 'kill-current-line "\C-a\C-k\C-k")
になるけど欲しいのは
> (defun kill-current-line () "現在行を削除する"
> (interactive)
> (move-beginning-of-line 1)
> (kill-line nil)
> (kill-line nil))
だし
そのために elmacro.el なんてものがある
http://emacs.rubikitch.com/elmacro/

> 本質的にあり得ない
仕様書のレベルによるでしょ
状態遷移表からコードを生成するツールは大昔から使われてるし、UML からコード生成する Rhapsody なんてものもある
まあ >>39 は Excel みたいなソフトが欲しいって入れたら Excel のソースコードが出るような奴を想定してるんだろうけど w

42デフォルトの名無しさん (オッペケ Sr97-QRqU)2017/03/17(金) 09:52:24.03ID:JeKk6+P8r
VBAが他言語と比較して下に見られるのはどうしてだろう。
他はCとHaskellしか触ってないから他言語はちら見だけど、OOPを使わないからどれも同じに見える。

むしろ、会社のPCにはエクセルは大体入ってるからコンパイラなしでスクラッチで書けて具合がいい。
また、Office系を動かすにはこれしかないんじゃないの?

30年以上前の話だけど、当時のパソコン雑誌(アスキーとかI/Oとか)には
投稿プログラムの16進ダンプリストが何ページにもわたって掲載されていた。

それを読者が手打ちで打ち込んでゲーム遊んだりしてたわけだが、
何の脈絡もない数字とアルファベットの羅列をひたすら打ち込む作業は
ドラクエの復活の呪文どころではない大変さだった。

一人でやってたら辛すぎるんで、
何人かで分担を決めて打ち込んで後でマージするんだけど、
それでも辛いことにはかわりない。

ダンプリストの端に付いてるチェックサムだけを入力して
ダンプリストを生成するようなプログラムが出来ないものかと
本気で考えていた。

44デフォルトの名無しさん (ワッチョイ 0364-12+v)2017/03/17(金) 10:01:38.86ID:wFMeanHH0
>>42
このスレでVBAの悪口を言っていたのはC言語処理系しか触った事無くて文法的に拒絶反応起こしていた奴らだな。

C言語処理系があまりにも氾濫しすぎていて、プログラム言語といえばC言語の文法って考えちゃってるんだと思う。
だから異なる文法の言語は全て本格的でない、オモチャみたいなものに見えるんじゃないの。

>>44
この原因もあるけど、使い手がピンきりってレベルじゃないのもある
オブジェクト指向サポートしてないし、製品の付属品ってこともあって軽んじられるのは多少仕方ないよね
まあ俺は使うしかないから使うんだけど

46デフォルトの名無しさん (スッップ Sddf-Ma5U)2017/03/17(金) 11:14:59.17ID:eWWVtvGxd
>>42
言うほど下には見られてないんじゃないか?

47デフォルトの名無しさん (JP 0H7f-v8EU)2017/03/17(金) 11:41:15.01ID:hpHy/rBLH
>>29
> コンパイルっていうけどさ、それで何か実行ファイルが出来るっていうわけじゃないよね?
コンパイルするとP-codeと呼ばれる中間コードに変換される。
メニューからコンパイルすると、Bookを保存するときにそのP-codeも含めて保存されて、次回からはコンパイルが不要になる、みたいなことをどっかで見た記憶がある。(嘘かも)

48デフォルトの名無しさん (スッップ Sddf-Ma5U)2017/03/17(金) 11:52:37.24ID:eWWVtvGxd
>>44
関係ないけど昔
「2chで悪口が頻繁に言われればMicrosoftも対応せざるを得なくなるよな」
と本気で言ってるやつがいた

49デフォルトの名無しさん (ブーイモ MMdf-8YZg)2017/03/17(金) 11:53:19.31ID:mgEFiKt+M
VBAはコレクションを扱うのにいちいちループ処理が必要なのがめんどい。
デフォで高階関数実装してくんねーかなあ。

50デフォルトの名無しさん (スッップ Sddf-Ma5U)2017/03/17(金) 12:00:59.79ID:eWWVtvGxd
>>49
自力で実装
 ↓
公開
 ↓
富豪

51デフォルトの名無しさん (ワッチョイ 0364-12+v)2017/03/17(金) 14:35:00.57ID:wFMeanHH0
高階関数って使ったこと無いけどちょっと調べた限りだとクラスを多用すれば似たような書き方に近づけそう

52デフォルトの名無しさん (ワッチョイ bf3c-y/cv)2017/03/17(金) 18:04:12.43ID:4a5+BdOt0
>>40
何が違うって言いたいのか理解できないんだけど
操作内容をプログラムとして利用可能な状態で記録できてないの?

53デフォルトの名無しさん (ワッチョイ bf3c-y/cv)2017/03/17(金) 18:10:22.03ID:4a5+BdOt0
>>42
汎用言語じゃなく基本的にOfficeでしか動かないにもかかわらず
ループ処理や配列処理で低いレイヤーを意識した90年代的コーディングが必要だから
あとVBAerの質の問題

54デフォルトの名無しさん (ワッチョイ bf3c-y/cv)2017/03/17(金) 18:13:05.09ID:4a5+BdOt0
あーあとWindowsプログラミングでC++かVBかっていう時代に
VBはアマチュアでC++がプロみたいな印象があってその名残もあるかもね
C#かVB.NETかっていう時代になってもなぜかVB.NETは馬鹿にされがち

>>52
> 何が違うって言いたいのか理解できないんだけど

>> (fset 'kill-current-line "\C-a\C-k\C-k")
これは単にキーシーケンスを記録/再生してるだけでしょ
例えば条件判断して動作を変えようとしたら Emacs のキーマクロ再生ルーチンに手を入れる必要がある

>> (defun kill-current-line () "現在行を削除する"
>> (interactive)
>> (move-beginning-of-line 1)
>> (kill-line nil)
>> (kill-line nil))
これなら Lisp と Emacs のキーバインドがわかってる人なら条件判断でもループでも組み放題ってこと

56デフォルトの名無しさん (ワキゲー MM1f-Rf/L)2017/03/17(金) 18:26:51.11ID:idI0Aki4M
>>55
上の方でも動くのは動くんだろ?
自動生成にそこまで精度は求めない

>>56
動けばいいというならもうなにも言う必要はないね

58デフォルトの名無しさん (スッップ Sddf-Ma5U)2017/03/17(金) 18:51:02.18ID:eWWVtvGxd
VBAerの質っても初心者が多いってだけでしょ。
敷居が低い以上しかたのない話だね。

>>58
プログラマーじゃなくてマクラー止まりがほとんどだからな

VB系列メインの人材って吐き気がするほど低品質なコードを生産するから業界全体で悪いイメージが定着してるんだよ
そして坊主憎けりゃ袈裟まで憎いの理論でVBまで悪者になってしまった

61デフォルトの名無しさん (ワッチョイ bf3c-y/cv)2017/03/17(金) 21:11:39.09ID:4a5+BdOt0
>>55
後者のほうがコードとしては使いやすいとか読みやすいのは理解できるが
前者でも条件判断だろうがループだろうが別に使えるし
必要ならキーシーケンスにバインドされてるコマンドに変換することもできる
本質的な違いがあるようには思えないわ

62デフォルトの名無しさん (ワッチョイ bf3c-y/cv)2017/03/17(金) 21:22:16.33ID:4a5+BdOt0
>>58
うーんそうじゃなくて、例えば他の言語もバリバリに使えるけど目的に応じてVBAも書くっていう人がまず少ないでしょ?
それに経歴の長い人でもメンテ不能な独善的コードを書く人が他の言語に比べて相対的に多いと思う
逆に誰でもメンテできるように仕様書やテストコードもきちんと整備して、わかりやすく読みやすいコードのかけるVBAerは超レア

※個人の感想です

63デフォルトの名無しさん (ワッチョイ 0364-12+v)2017/03/17(金) 21:47:05.87ID:wFMeanHH0
>>62
保守性が高く、仕様書とテストコードが完璧で、分かりやすく読みやすいコードを書ける人材が、
他の言語では掃いて捨てるほどいるというのか・・・。

64デフォルトの名無しさん (ワッチョイ 73da-12+v)2017/03/17(金) 22:29:46.54ID:z6ML212A0
計算結果を出力する以下の行でエラーでたま〜に止まる。
ws_out.Cells(LastRow_out + 1, 1).Resize(200, 12) = Out
エラーの内容は”アプリケーション定義またはオブジェクト定義のエラーです。”というもの。
エラーが出るとVBEが立ち上がってるからF8で逐次実行すると何もなかったように無事に書き込まれる。

そこで、On Error GoTo ErrorHandlerを追加し、
以下のように再帰で再び書き込もうとすると数回エラーは出るもののその後は無事に書き込めるという訳わからんことになっています。

(続く)

65デフォルトの名無しさん (ワッチョイ 73da-12+v)2017/03/17(金) 22:32:09.02ID:z6ML212A0
なんか書きこめない・・・

66デフォルトの名無しさん (ワッチョイ 73da-12+v)2017/03/17(金) 22:34:27.02ID:z6ML212A0
途中が書きこめない・・・なんで?

つまり、ws_out.Cells(LastRow_out + 1, 1).Resize(200, 12) = Out
で、無事に書き込めるときもあれば、書きこめないときもある。
その違いが全くわからないという状況なんです。
今のところはエラー出たら何度も書き込みをトライして無事書きこめている状況です。
なんか気持ち悪いのでエラー発生の原因を知りたいのです。
どなたかアドバイスを宜しくお願いします。

67デフォルトの名無しさん (ワッチョイ 73da-12+v)2017/03/17(金) 22:36:54.25ID:z6ML212A0
なぜか、On Error GoTo ErrorHandlerの内容が書きこめない・・・

68デフォルトの名無しさん (ワッチョイ 73da-12+v)2017/03/17(金) 22:42:10.97ID:z6ML212A0
>>64です。
なんか書きこめないので画像ですみません。
http://i.imgur.com/zhd3NB0.jpg

69デフォルトの名無しさん (ワッチョイ bf3c-y/cv)2017/03/17(金) 22:43:31.10ID:4a5+BdOt0
>>63
「完璧」って急にハードル上げるなよ

会社や使ってる言語にもよるだろうけど
例えばそこそこの経験があるRuby使いが10人いれば少なくとも3~5人は
メンテできるように仕様書やテストコードもきちんと整備して
わかりやすく読みやすいコードのかける人っていう印象
VBAだと20人に1人いるかどうか(※あくまで印象)

VBAerの質というよりVBAと他言語の文化の違いかもね

70デフォルトの名無しさん (ワッチョイ 133c-rTqZ)2017/03/17(金) 22:51:28.68ID:pi9a1Bwa0
>>64
アプリケーション定義のエラーってセルのアドレス指定がおかしいんじゃねえかと
0とか指定してんじゃね?

71デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/17(金) 23:15:45.93ID:woddruPm0
>>61
> 前者でも条件判断だろうがループだろうが別に使えるし
どうやってやるの?
具体的に書いてみて

> 必要ならキーシーケンスにバインドされてるコマンドに変換することもできる
それが elmacro.el
そもそも○○すればできる
って言い出したらそりゃなんでもありありだよ

72デフォルトの名無しさん (ワッチョイ bf7b-WisJ)2017/03/17(金) 23:29:05.33ID:Ilx7INmz0
VBAのBがいけない。
VCAだったら誰もバカにしないだろう。

73デフォルトの名無しさん (ワキゲー MM1f-Rf/L)2017/03/18(土) 00:28:05.58ID:j21tsAGgM
>>71
やるなら他でやってくれ
既にVBAの話題じゃなくなってる

74デフォルトの名無しさん (ワッチョイ bf3c-y/cv)2017/03/18(土) 01:49:37.37ID:vBdYmHk50
>>71
ググるなりEmacsスレに行くなりお好きにどうぞ
別にelmacroみたいな追加パッケージが必須なわけじゃないんだよ

75デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/18(土) 05:33:14.82ID:1jN6Nl4i0
>>74
具体的にって言われてそれかよ w

76デフォルトの名無しさん (ワッチョイ bf7b-QRqU)2017/03/18(土) 09:32:02.11ID:tmgM3nCR0
VBAは自分の仕事を効率化するためにだけ使ってる人が多いと言うことでは?
他人に引き継がせるのを想定していないのに、業務上引き継ぎを求められる時に問題となるのではないかと。

77デフォルトの名無しさん (アークセー Sx97-tW1y)2017/03/18(土) 09:44:26.54ID:AVWnB++fx
>>75
理解できるのw

78デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/18(土) 10:02:12.33ID:1jN6Nl4i0
>>77
恥ずかしいからもう出てくるなよ w

普段からエレガントなコードを心がければ別に自分用だろうがなんだろうが引き継ぎに問題はないはずなんだが…
VBAは使い捨てだから自分用だからという理由を免罪符にして雑で汚いコードを書く人ばかりだから困る
他の言語では丁寧に美しいコードを書く優秀な人ですらVBAになると所詮はVBAだし適当でいいだろと開き直る
VBAは人を堕落させるなにか不思議な力がある

>>79
レガシー環境だとエレガントに書こうとしても理解してもらえない

81デフォルトの名無しさん (ブーイモ MM77-tW1y)2017/03/18(土) 11:57:59.67ID:3dStCg/nM
>>78
はい

82デフォルトの名無しさん (ワッチョイ 234b-WisJ)2017/03/18(土) 12:40:55.94ID:SPZFu7Fy0
だいぶ前から特定のソースコードが書き込めないし、エラーすら出ない
なぜかNGワード判定すらスルーされて、原因を絞り込もうとすると連投エラーだけは出て絞り込みも困難

2ちゃんねるのCGIのバグだと思うけど、どうすりゃいいんだ

>>82
ダブルクォーテーションでエラー出てたことあったしその辺の関係じゃないかな

84デフォルトの名無しさん (オッペケ Sr97-QRqU)2017/03/18(土) 13:02:12.46ID:ySaYO4GFr
多義的な形容詞を具体例を示さずに不用意に使う人間はそういう人間なのだと思ってる。

コードを書き込むとエラーすら出ずに書き込め無いことがある
2chとはそういうもんだと諦めるんだな
不便だと思うなら他のコミュニケーションサイトを使おう

86デフォルトの名無しさん (ワッチョイ bf3c-y/cv)2017/03/18(土) 17:07:22.13ID:vBdYmHk50
>>75
君はいつも自分の無知を棚に上げて嫌味な物言いだよね
煽っても教えてあげないから
つかEmacsユーザーなら少しググればすぐ分かるだろ

レコーダーで記録したマクロをきれいなコードにするには
大なり小なり編集が必要なのはどのツールでも同じ
Excelは違うと思ってるんなら別にそれでもいいんじゃない

87デフォルトの名無しさん (ワッチョイ bf3c-y/cv)2017/03/18(土) 17:12:42.72ID:vBdYmHk50
>>66
これってほんとに成功するケースと失敗するケースで何も条件変わってないの?
書き込もうとしてる値とか対象とかActiveSheet/Selectionとか
intermittentなエラーってあまり聞いたことがない

8864 (ワッチョイ 73da-12+v)2017/03/18(土) 17:18:57.64ID:gLAUrVs40
>>70
>アプリケーション定義のエラーってセルのアドレス指定がおかしいんじゃねえかと
>0とか指定してんじゃね?
いや、エラーで止まる度に各変数の値は確認していますがそんなことはないんです。
その証拠にエラーで止まって変数確認したすぐ後にF8押すと問題なくその行が実行されるんです。
変数は書き換えてないのに・・・

殆どの場合は問題ないんですが稀に止まるという気持ち悪い状況なんです。
他に考えられる原因ってありますかね?

8964 (ワッチョイ 73da-12+v)2017/03/18(土) 17:32:42.37ID:gLAUrVs40
>>87
条件は変わってないはずです。もっとよく考えてみますが。
昨日もエラーでてましたが変数など書き換えずに書き込みを数度繰り返し無事書きこめました。
アクティブシートを切り替えても普段は正常に書きこめます。

書き込む値についてはあまり気にかけていませんでしたが、
エラーで止まった後にF8で問題なく実行できるので値が原因ではないような気がしますがどうなんでしょう?

>ws_out.Cells(LastRow_out + 1, 1).Resize(200, 12) = Out
のOutは標準モジュールでPublic Out(1 To 200, 1 To 12)で宣言しているものです。
型指定なしの宣言です。

90デフォルトの名無しさん (ワッチョイ 234b-WisJ)2017/03/18(土) 17:44:41.47ID:SPZFu7Fy0
Win8やWin10はアプリを終了してもすぐにプロセスが消えないことがあるんで、
条件が完全に同じかどうか使用者でもわかってない場合がある

91デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/18(土) 19:59:50.33ID:1jN6Nl4i0
>>86
きれいなコード?
苦しいね w

92デフォルトの名無しさん (ワキゲー MM1f-Rf/L)2017/03/18(土) 20:09:06.17ID:SiDzaxEQM
>>91
恥ずかしいからもう出てくるなよ w

93デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/18(土) 20:21:20.20ID:1jN6Nl4i0
恥ずかしいのは後出しで「きれいなコード」とか言い出したアホなんだけど w

> 別にelmacroみたいな追加パッケージが必須なわけじゃないんだよ
と言ってどうするのかと思ったら
> レコーダーで記録したマクロをきれいなコードにするには
> 大なり小なり編集が必要なのはどのツールでも同じ
とか笑えるわ

94デフォルトの名無しさん (ワッチョイ 0364-12+v)2017/03/18(土) 20:33:19.62ID:u64MpNEX0
元々自動生成の程度を厳密に定義してなかったからな

>>85
書き込んだのに書き込めないとはこれいかに

96デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/18(土) 20:38:46.38ID:1jN6Nl4i0

97デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/18(土) 21:06:01.70ID:MrF88dzm0
emacsのことは知らないし今のところ興味もないんです

98デフォルトの名無しさん (ワッチョイ bf3c-y/cv)2017/03/18(土) 21:19:04.00ID:vBdYmHk50
>>93
もうみっともないな
Emacs知らないのに無理して突っかかる必要ないだろ

99デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/18(土) 21:27:23.36ID:1jN6Nl4i0
他人にまで突っかかるようになったらおしまいやね w

100デフォルトの名無しさん (ワッチョイ 73da-12+v)2017/03/18(土) 22:58:59.74ID:gLAUrVs40
>>90
今の環境はWin7 + Office2010 です。

101デフォルトの名無しさん (ワッチョイ ef02-Spsh)2017/03/18(土) 23:38:29.66ID:CfRBZ1GA0
>89
>Outは標準モジュールでPublic Out(1 To 200, 1 To 12)で宣言しているものです
リトライしたときにOutが戻す値が変わってるんじゃね
戻り値一回変数に受けて、エラーが出たときと出ないときで比べてみれば?

102デフォルトの名無しさん (ワッチョイ 8f5b-u6wT)2017/03/18(土) 23:46:34.39ID:EFRz0aVM0
最近エクセルVBA勉強し始めたど素人です。
どなたか教えてください。

ttp://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_listbox.html
↑のページに書いてあるコードを参考に検索フォームを作ってます。

検索するデータを配列mydataに格納して、検索で一致したデータをmydata2に格納するコードについてなのですが、

If myData(i, 2) Like "*" & TextBox1.Value & "*" And myData(i, 7) Like "*" & TextBox2.Value & "*" Then

上記コードは、テキストボックス1で2列目、テキストボックス2で7列目を検索していますが、
テキストボックス1で2列目〜7列目まで範囲を広げて検索をかけるようなコードにできないものでしょうか?
mydataのなかにrangeやcells等入れて試してみたんですが、なかなかうまくいきません。

どなたかご教授ください・・・

>>88
そら大した証拠になってない
その処理でエラーの場合明らかにワークシートかセルにたいしておかしな値を指定してるのが問題だろう
そもそもどういう処理の流れでってのがわからんとなんとも言えないのだがな
まあ、とにかく問題の切り分けだ
エラーで止まってから確認するんでなく処理の流れで確認しないとダメなこともあるんでDebug.Printか.Assert入れて各変数およびオブジェクトの値やら型やら全部確認してみて
そしたらおかしなところで止まるからそれが原因

104デフォルトの名無しさん (ワキゲー MM1f-Rf/L)2017/03/19(日) 00:34:49.34ID:Xey8ybM4M
iで縦をなめてるのなら同じように横をなめればいいよ
2列目と7列目を固定で検索してるのはどこかわかれば見当つくと思う

>>102
for i = iの最初 to iの最後
 for j = 2 to 7
  if myData(i,j) like テキストボックスの値 then
   処理
 next j
next i

恐らくiはループ変数だと予想したんだが、間違ってないよな?
聞くときはその辺もちゃんと書いてくれないとエスパーにしか答えられなくなるぞ

end ifが抜けてたw
すまんな

107デフォルトの名無しさん (ワッチョイ bf7b-WisJ)2017/03/19(日) 08:24:55.47ID:TEeAUA+Q0
>>102
>最近エクセルVBA勉強し始めたど素人です。

だったら、こんな難しいのじゃなくて、
Excelのフィルタ機能を使っている所をマクロ記録して、
改変するほうが簡単。

108デフォルトの名無しさん (スプッッ Sddf-WisJ)2017/03/19(日) 09:03:57.15ID:d7txTs2Od
練習問題を否定してどうする

109デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 09:12:08.74ID:7xRC3K/l0
>>102
氏名は2列目じゃなくて1列目、住所は7列目じゃなくて6列目にしないといけないのでは?
つまり
If myData(i, 1) Like "*" & TextBox1.Value & "*" And myData(i, 6) Like〜

110デフォルトの名無しさん (ワッチョイ bf7b-QRqU)2017/03/19(日) 09:42:20.97ID:7GUCcHR60
likeなんて関数があるんだね。全部自作してたわ。

111デフォルトの名無しさん (ワッチョイ bf3c-12+v)2017/03/19(日) 09:47:39.48ID:h5YhjNPa0
>>109
どう見ても氏名は2列目で住所は7列目なんだが…
初心者にデタラメ教えてどうする。

>>110
関数と演算子の違いくらいわかろうぜ

112デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 11:30:18.32ID:7xRC3K/l0
>>111
オッ、今はセル範囲.Value で取れる配列が 1オリジンなんだな!!!
素で間違えていたわ。スマソ

113デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 11:34:09.69ID:7xRC3K/l0
>>102
自分のプログラムではセル範囲からとった配列を0オリジン(LBound = 0)に変換する関数を10年くらい使っていて
無意識のうちにそれがデフォルトの仕様だと思いこんでいた。
>>109は忘れてください。すまんこって

10年も配列に取り憑かれているのか

115デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 12:14:39.77ID:7xRC3K/l0
>>114
ごめん15年だった

116デフォルトの名無しさん (オッペケ Sr97-QRqU)2017/03/19(日) 12:16:55.06ID:j3OPhkRkr
>>111
arityが2の中置関数だよ、演算子は。関数の方が概念として広い。
こういう感覚がないのだな、プログラマって。

117デフォルトの名無しさん (オッペケ Sr97-QRqU)2017/03/19(日) 12:18:45.58ID:j3OPhkRkr
関数型プログラミングが難しいと言われてるのも分かった気がする。

118デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/19(日) 12:30:30.27ID:IinMJCLx0
配列の上下限を設定できる言語使ってのにわざわざ変換するとか意味わからん...

119デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/19(日) 12:31:47.22ID:IinMJCLx0
>>116
そんな感覚はないわ

120デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 12:38:41.90ID:7xRC3K/l0
>>118
複数の配列を扱うプログラム中では下限を統一しとかないと面倒でしょ

121デフォルトの名無しさん (ワッチョイ bf3c-12+v)2017/03/19(日) 12:45:05.70ID:h5YhjNPa0
>>116
概念として 関数⊃演算子 なのはわかる。
ただVBAで関数と演算子は使い方が明確に区別されてるから、
VBAでLikeや四則演算を関数と呼ぶには物凄く違和感がある。

122デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/19(日) 12:54:00.77ID:IinMJCLx0
>>120
そのために下限を設定する機能があるんだが...

>>121
+ を関数って呼ぶようなアスペの相手するなよ

124デフォルトの名無しさん (スッップ Sddf-Ma5U)2017/03/19(日) 13:50:34.07ID:ZMNP6m9nd
>>122
Option Base をどうしようと
範囲.ValueのLBoundはで1SplitのLBoundは0じゃなかった?

125デフォルトの名無しさん (スッップ Sddf-Ma5U)2017/03/19(日) 14:06:34.29ID:ZMNP6m9nd
>>123
まあこの世に数学がまずあってプログラム言語はそこから派生すると考えれば
演算子は関数の一種だし、そう考えなければ別物だし

126デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 18:38:46.15ID:7xRC3K/l0
>>124
あと VBA.Array も Option Baseと関係なしに LBound=0 だね。
(Array はOption Baseの指定通りになる)

>>88
それって結構よくあることだと思うんだが。
PC再起動すれば直る。
っちゅうか、それエラーって認識なの?
確かにエラー表示だけどさ。


あれだろ、ステップ実行はできるんだけどやたら止められる奴だろ。
止まってもF5で続行できるけどすぐ別の所で止まる。
んで、止まった場所見てもおよそエラーとは考えられないようなの。

>>126
基本は0だけどvarArry=Range("C3:P250")みたいなのは1からになるだろ。
で、混在するから素直にLbound使う。
上記のようなことしないなら0使うな。

129デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 19:11:04.55ID:7xRC3K/l0
>>128
混在して厄介だから統一するために
「セル範囲からとった配列を0オリジン(LBound = 0)に変換する関数を使う」
という話なんだが。
つまりvarArry=Range("C3:P250")としたあとすぐにLBound(varArry)を0にチェンジしておけばそのあと楽だ、ということ。

>>129
よくわからんな。
Lboundのまま使わんの?

131デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/19(日) 20:45:33.05ID:IinMJCLx0
>>130
面倒なことが好きなんだろ

132デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 22:06:16.39ID:7xRC3K/l0
>>130
すごく単純化して言うと、関数の引数が ArrayA と ArrayB で、
For i : ArrayC(i) = ArrayA(i) + ArrayB(i)
みたいにして作った ArrayC が返り値だとして、
ArrayA と ArrayB のLBoundが違っていたら単純に面倒な上にArrayC のLBoundを
何にするかが問題になる。
だから全部0に統一したい。

133デフォルトの名無しさん (ワッチョイ bf85-12+v)2017/03/19(日) 22:46:34.24ID:yQ6I5BAH0
Option Base で 0 にしときゃいーだろとめんどくさそうな流れ全然見ずにw

134デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 22:50:58.30ID:7xRC3K/l0
>>133
Option Base = 0 にしといてもExcel VBAの仕様で範囲.Value のLBoundは強制的に 1になっちゃうんだよ。

ABの境界チェックして違ってたらエラー
同じならCも揃えて返せば良いだろ
形の違う行列を加算するのは100円と100グラムを加算するようにおかしな行為なんだよ
素人ってこういう当たり前の感覚もないんだな
つうかまあそもそも配列をそのまま使うのがトラブルの素なんだけどな

136デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 22:57:38.53ID:7xRC3K/l0
>>135
形も長さも同じでLBoundが違うだけでもおかしいな行為なのかよ?
その感覚の方がおかしい

137デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 23:02:05.59ID:7xRC3K/l0
例えばArrayAはテキストファイル由来の配列データでLBound=0
ArrayBはワークシート由来の配列データでLBound=1
同じ大きさだとして、これを比較して何か結果を返す関数なんていくらでも考えられるだろ?

>>136
もうすでにどっちの下限使うかで判断付かなくなってるだろ
何も悩まず自然な定義が出来ない時点でその処理はどこかがおかしいんだよ
こういうコードに対する感覚って大事だぜ

139デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 23:07:07.34ID:7xRC3K/l0
>>138
だから0に統一すると言っているじゃないか

>>137
それはフォワードオンリーなシーケンスとしてABを抽象化してシーケンス比較する時の話だろ
行列の加算と全く意味合い異なるんだが素人には同じに見えるのか?

141デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 23:10:00.23ID:7xRC3K/l0
>>138
コードに対する感覚っていうことなら
Option Base 0 と設定しているのに 範囲.Value のLBoundが 1になるのがおかしい、
が正解なんじゃないか?

製品の仕様に文句付けても実りがないから、0に統一する関数を自分で作るというのはとても真っ当だと思うけどね。

>>139
それはお前のルールだろ
世の中には1ベースの方が自然な人も沢山いるんだよ
どうしても違う形の行列を加算したいなら配列とオフセットを渡すようにしなさい

>>141
アプリケーション側で指定したOption Base 0にライブラリ側が従う義理はない
当然ライブラリにそれを求めて達成できなければおかしいと考えるお前がおかしい

144デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 23:13:29.28ID:7xRC3K/l0
>>140
シーケンスがどうとか関係なく出来上がった結果の配列を処理するときの話だぞ?
出来上がった配列を引数に取る関数が、その配列の由来がどこかなんて気にしないだろ。

加算:ArrayC(i) = ArrayA(i) + ArrayB(i)

比較:If ArrayA(i) < ArrayB(i) Then〜
で何の意味合いの違いがあるというのか?

配列の加減を統一する関数の発想はなかったな
まあ最近はあんまり配列使わんけど

146デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 23:15:24.65ID:7xRC3K/l0
>>142-143
ごめん、ちょっと意味がわからない

>>144
ソースがファイルだろうがシートだろうがメモリだろうが同じ話だよ
行列の加算なら形が違うのはおかしい
形が同じならおかしくない
シーケンスの比較なら形が違ってもおかしくない

148デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 23:23:12.41ID:7xRC3K/l0
>>138
Function FuncX(配列A, 配列B)
という関数があって、配列Aと配列Bが同じLBoundであるべきだ、っていうのはまあその通りさ。

俺が言っているのは、FuncXのユーザーがふたつの配列を渡したいんだけど、片方はLBound=0で他方はLBound=1のとき困るから
LBoundを0に変える関数を用意してあげる、っていう意味だぞ?

149デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 23:24:32.61ID:7xRC3K/l0
>>147
「形」って何だよ?定義してくれ

150デフォルトの名無しさん (ワキゲー MM1f-Rf/L)2017/03/19(日) 23:28:59.32ID:21BNG92vM
そもそもな
102のmydataの型は配列ではなくrange
そのため1スタート
その他の表にとらわれない型は0スタート

これだけの話

>>148
エラーにする
オフセットを指定するようにする
配列ではなく別の抽象コンテナを作って配列をラップする

下限が違うのに勝手に下限を揃えて処理をするなんて直感に反するよ

>>149
2つの配列の各次元の下限上限が同じならそれらを同じ形とする

153デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 23:35:33.45ID:7xRC3K/l0
>>151
それは単に不便だ。
セル範囲由来の配列を使う場面は多い。

>>152
俺の定義は違うな
「2つの配列の各次元のサイズが同じならそれを同じ形とする」だ

154デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 23:38:27.57ID:7xRC3K/l0
>>151
「勝手に」とか「直感に反する」とかいうのがまさに主観的過ぎてついていけませんね

155デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 23:41:41.40ID:7xRC3K/l0
「配列とオフセットを渡すようにしなさい」
とかいうのも微妙におかしな主張であるな

>>153
視覚にとらわれすぎ

>>154
重要な考え方だぞ

>>155
伝統的で直感に反することなく要求を満たしている方法の筈だが?
無論最初にあげたようにエラーにするのが最も安全だ
とはいえオーバーヘッドを避けたい場面もあるからな

158デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/19(日) 23:49:28.78ID:7xRC3K/l0
>>156
どうでもいいよ。
単に「不便だ」、と言っている。

ユーザーにとってLBoundが違うだけでFuncXが使えないのが不便と感じるなら
LBoundを0に変える関数を用意したから使ってね、というだけのこと。
もしくは 範囲.Value をラップして LBound=0の配列を返す関数を用意するとか。

「勝手にLBoundを変えるな」とか「直感に反する」とかどうでもいいや。俺はな。

159デフォルトの名無しさん (ワキゲー MM1f-Rf/L)2017/03/19(日) 23:53:47.80ID:21BNG92vM
なるほど
様々な視点があるからモノは準備はしておいて
使うかどうかは利用者に任せるよってスタンスなのね

>>158
それなら別にいいぞ
勝手に変換かけたりクライアント視点で直感的でない法則で比較したりしなければな
そういうことをやると後々不便になるから

161デフォルトの名無しさん (ワッチョイ bf3c-y/cv)2017/03/19(日) 23:58:05.08ID:Lj5IhMr80
あいも変わらず上から目線の嫌味な人ばっかりだね
こういう人たちが目につくからVBAerって嫌われるんだろうな

>>158
俺は君の感覚のほうが普通だと思うぞ

162デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/20(月) 00:35:09.06ID:vLjOgWLd0
LBoundなんて飾りなんですよ。
LBound=0の配列xのx(0)とLBound=1の配列yのy(1)は相対的に同じ位置なんだし。

163デフォルトの名無しさん (ワッチョイ bf3c-12+v)2017/03/20(月) 00:43:50.45ID:AEJU+djn0
また恐ろしくどうでも良いことでやりあってるなw
むしろ誰か>>150へ突っ込んでやれw

164デフォルトの名無しさん (ワッチョイ ef5b-ZN0E)2017/03/20(月) 04:43:30.15ID:Kbki2X9l0
>>132
はあ?
何が面倒なの?
全く面倒じゃ無いだろ。

ArrayCのLBoundは0にするだろ。
お前は基本0始まりじゃ無かったのか?
お前のルールでは範囲.Valueの時だけだろ1始まりにするのは。

165デフォルトの名無しさん (ワッチョイ 0364-12+v)2017/03/20(月) 05:53:42.73ID:l0Ltc5750
プログラムに普遍的な解法なんてないから(あったら自動化されてるから)、
せめてケースを限定して取り扱い方を議論してくれ。

166デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/20(月) 07:01:39.79ID:LcNjV7jZ0
>>132
普通に i を 0 ベースにして
ArrayC(i+LBound(ArrayC)) = ArrayA(i+LBound(ArrayA)) + ArrayB(i+LBound(ArrayB))
ってやればいいだけでしょ
面倒なのはわかるけどそんな箇所がはそうたくさんにならないだろ
> ArrayC のLBoundを
> 何にするかが問題になる。
何が問題なのかさっぱりわからん

167デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/20(月) 07:18:38.16ID:vLjOgWLd0
そんなことより朝起きたらステップ実行で止まったままの状態だった

168デフォルトの名無しさん (ワッチョイ bf7b-WisJ)2017/03/20(月) 11:42:03.16ID:SDewNJ4f0
そもそも、アドバンスドフィルタで済むことを、
何で複雑にやろうとするんだよ。

169デフォルトの名無しさん (ワッチョイ bf7b-QRqU)2017/03/20(月) 13:15:05.95ID:LXO+ChBL0
>>121
>>125

関数と演算子って何が違うん?
基地外じゃないけど糖衣構文なだけで一緒に見えるが。

170デフォルトの名無しさん (ワッチョイ 0364-12+v)2017/03/20(月) 13:37:39.53ID:l0Ltc5750
>>169
処理的にも概念的にも同じものだけど、
初心者に教える際に同じものとして教えてしまうと、

+ A,B
Ary = "A,B,C,D" Split ","

等の表記が何故出来ないのかっていう疑問にぶつかっちゃうからじゃない?

171デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/20(月) 13:54:11.51ID:LcNjV7jZ0
>>169
同じだと言えば同じだし
違うと言えば違う
比較項目を決めないと意味がないよ

172デフォルトの名無しさん (スップ Sddf-Ma5U)2017/03/20(月) 13:56:37.31ID:2XxH75njd
>>170
出来てもおかしくないし採用するしないの違いだけ

>>169
CallByName

174デフォルトの名無しさん (ワッチョイ bf3c-12+v)2017/03/20(月) 14:02:37.39ID:AEJU+djn0
>>169
「VBAでは」演算子のことを普通は関数って呼ばないでしょって話。
>>170が書いてくれた理由にて。
Common Lispみたいな言語なら別に違和感ないんだけどね。

関数は呼び出せる
演算子は呼び出せない

関数は名前がある
演算子は名前がない

176デフォルトの名無しさん (ワッチョイ bf3c-12+v)2017/03/20(月) 14:09:55.53ID:AEJU+djn0
Common Lispだと演算子っていうよりシンボルか。

あと、リファレンスなんかではOperatorとFunctionって別個の項目に書かれてない?
VBAのその辺のリファレンス見たことないけどw

177デフォルトの名無しさん (ワッチョイ 234b-WisJ)2017/03/20(月) 14:48:21.64ID:ONBQjivu0
>>175
名前の有無って言い方はおかしい

機能と文字列が対応してるって意味では同じ
記号だって文字列のうちだし、例えばAnd演算子なんか英単語そのもの

結局はオペレータとオペランドを並べる順番だとか、わかりやすさだけの問題
最後は宗教か哲学の話に行き着く

178デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/20(月) 14:53:46.56ID:LcNjV7jZ0
>>176
> VBAのその辺のリファレンス見たことないけどw

Function
https://msdn.microsoft.com/en-us/library/office/jj692811.aspx
Operators
https://msdn.microsoft.com/en-us/library/office/gg278416.aspx

>>177
コンパイラの動作を考えれば分かるでしょ
関数は名前をつけて他から参照できるように処理する
演算子はその場で計算されるか対応するニーモニックに置き換えられる
関数と演算子じゃやってる事が全く違うんだよ
Andが英単語とかトンチンカンな事を言うな

Andは名前ではなくキーワード
これ重要な

181デフォルトの名無しさん (ワッチョイ 234b-WisJ)2017/03/20(月) 15:10:26.39ID:ONBQjivu0
>>179
結局はコンパイラにどこまで処理させるかっていう設計上の問題に過ぎない
たとえば足し算を
Plus(a, b)
みたいな関数的な書き方にしようと思えば相互に変換可能だし得られる結果も等価
結局は慣れ、あるいは宗教

182デフォルトの名無しさん (スップ Sddf-Ma5U)2017/03/20(月) 15:23:29.41ID:2XxH75njd
2変数関数として解釈するのが普通ではあるが

>>181
相互に変換不可能
CallByNameは演算子を使えないぞ

184デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/20(月) 15:35:54.51ID:LcNjV7jZ0
>>179
Variant に対する演算は1命令じゃできなくて内部の処理ルーチン呼び出すから関数とやることはたいして変わらんよ
C とかなら一部の関数はインライン展開したりもするし

185デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/20(月) 15:37:35.97ID:LcNjV7jZ0
>>183
だからそれはシンタックスの問題
C++ なら演算子を関数のように呼び出したりもできる

>>185
operator +は関数のように扱えるが+演算子はそうではないだろ
つうか今はVBAの話だらな?

187デフォルトの名無しさん (ワッチョイ 0364-12+v)2017/03/20(月) 16:09:51.07ID:l0Ltc5750
「関数と演算子の区別がつかない」と言っている人向けの解説を模索すべきであって、
「僕の考えた最強の分類」を語るべきでは無い。

188デフォルトの名無しさん (ワッチョイ 33b2-12+v)2017/03/20(月) 17:02:37.76ID:X7rTJWAq0
なんかすごく難しい話になってるけど、関数と演算子の区別なんて、「リファレンスの区分がこうなってるから」で終わりだよね

189デフォルトの名無しさん (スップ Sddf-Ma5U)2017/03/20(月) 17:14:25.70ID:2XxH75njd
>>188
Yes.
あるべき論じゃないもんな

190デフォルトの名無しさん (スップ Sddf-Ma5U)2017/03/20(月) 17:22:50.30ID:2XxH75njd
竜頭蛇尾は困る

191デフォルトの名無しさん (ワッチョイ 234b-WisJ)2017/03/20(月) 17:53:48.96ID:ONBQjivu0
VBAに限って、どう違うかわからない人のために説明すると、
「言語を作った人がそう決めたから」「丸暗記するかマニュアルを見るしかない」
てことになる

あんまり合理性はなく、むしろ歴史的な理由の方が大きい
結局は人間が適当に、あるいはリソースが少なかったために仕方なく決めたこと
言語によって使える演算子は違うし、関数だって初期のMS-BASICでは使えないか貧弱だった

192デフォルトの名無しさん (ワッチョイ 73da-12+v)2017/03/20(月) 17:54:11.68ID:kdixSjkW0
なんか盛り上がってる・・・

>>101
そうですね、Outの内容を確認してみます。
リトライ前後でOutの内容は同じはずと思いこんでてやってませんでした。

>>103
了解しました。変数の内容を確認してみます。
debug.assert って初めて知りました。なんか便利そうです。

>>127
よくあることなんですか?再起動しか解決方法はないんですか?
できればコード修正でエラーを防ぎたいのですが・・・

どうせ >>116 辺りが引っ込みつかなくなって暴れてるだけだろ w

194デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/20(月) 18:21:21.83ID:LcNjV7jZ0
>>186
> operator +は関数のように扱えるが+演算子はそうではないだろ
何を言ってるんだ?さて
operator は演算子を定義するキーワードだぞ

> つうか今はVBAの話だらな?
と言うなら >>188 (>>178) で終わりだろ

195デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/20(月) 18:29:48.60ID:vLjOgWLd0
射だよ射

>>194
c++やり直してこい

197デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/20(月) 18:39:12.73ID:LcNjV7jZ0
>>196
そんなレスしかできないなら黙ってろ

>>197
いやほんとやり直してきた方がいいよ
君の知ってるc++っておかしいから

199デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/20(月) 19:41:59.64ID:LcNjV7jZ0
>>198
どこがおかしいのかも指摘できないなら黙ってろ

>>199
レス読めよ
もう書いてあるだろ

201デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/20(月) 20:07:28.18ID:LcNjV7jZ0
>>200
低能のやり口乙
レス番示して引用してみ


203デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/20(月) 20:38:28.41ID:LcNjV7jZ0
>>202
で、どこがおかしいのかも書けないのかよ
バカですか?

>>203
だから>>194見なよ書いてあるから
もしかしてそういう芸風なの?

205デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/20(月) 21:10:42.30ID:LcNjV7jZ0
>>204
やっぱり具体的に指摘できないのな w
どうせそのまま逃げ回るんでしょ

>>205
既に具体的に書いてあるじゃん
なんで見ないふりするのよ

207デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/20(月) 21:31:12.17ID:vLjOgWLd0
「演算子である」は「関数ではない」を導かないから水掛け論だ

208デフォルトの名無しさん (ワッチョイ bf3c-3fK7)2017/03/20(月) 21:39:03.23ID:LcNjV7jZ0
>>206
はい逃げた w

209デフォルトの名無しさん (アークセー Sx97-tW1y)2017/03/20(月) 22:46:05.48ID:AEzdqyypx
さて
マウンティング大会の勝者はだれw

210デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/20(月) 23:15:23.23ID:vLjOgWLd0
高安

VBA での関数/演算子の話なら >>188 で終了

212デフォルトの名無しさん (ワッチョイ 0364-12+v)2017/03/21(火) 01:08:04.88ID:gDv70PB60
VBAのクラスにもOperatorキーワード欲しかったな。

213デフォルトの名無しさん (アークセー Sx97-tW1y)2017/03/21(火) 09:32:12.88ID:9jHYTXobx
あれ?
勝者はいないのかな?

時間掛けてなにも分からずw

214デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/21(火) 09:57:56.10ID:ilj7cuzd0

215デフォルトの名無しさん (ブーイモ MMdf-tW1y)2017/03/21(火) 10:02:29.55ID:g2yQnV2GM
>>214
サンキュー

>>192
結果出たら教えてね

217デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/21(火) 12:47:48.47ID:ilj7cuzd0
IsNumeric(Date)とIsNumeric(Now)がFalseなのが気に食わない

>>217
日付時刻型は数値に変換はできるけど数値ではないだろそりゃ

219デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/21(火) 13:08:11.44ID:ilj7cuzd0
>>218
IsNumeric(Empty)とIsNumeric("999")はTrue
IsNumeric(Null)とIsNumeric(Nothing)はFalse

これでDate型がNumericでないのは気に食わない

220デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/21(火) 13:10:56.31ID:ilj7cuzd0
>>219
も一つ忘れてた
IsNumeric(True)とIsNumeric(False)もTrue

221デフォルトの名無しさん (ワッチョイ bfa8-12+v)2017/03/21(火) 13:15:49.31ID:sHA4zKwN0
お前が気に食わなかろうとどうだろうと知ったこっちゃない
文句いいたきゃMSに言え

222デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/21(火) 13:21:09.80ID:ilj7cuzd0
>>221
だからこういう場所で言ってんじゃんかよw

223デフォルトの名無しさん (ワキゲー MM1f-Rf/L)2017/03/21(火) 13:23:41.95ID:anlqUc4mM
それは俺らに解消できる質問になるの?

224デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/21(火) 13:40:43.95ID:ilj7cuzd0
>>223
さあ。
気に食わないから呟いただけで、賛同者がいなくて話題が続かなければ引っ込むまでさ

225デフォルトの名無しさん (スップ Sddf-Ma5U)2017/03/21(火) 15:14:53.68ID:62+JQA0Hd
>>217
じゃあさ、
CLng(#2017/3/21#) = CLng("42815") = 42815
なんだけど、お前は #2017/3/21# と"42815"のどっちが「数値らしさ」が上だと思う?

226デフォルトの名無しさん (ワッチョイ 33b2-12+v)2017/03/21(火) 15:47:43.28ID:HrPLjJur0
Dim V As Variant
V = "12345"
?IsNumeric(V) ・・・Trueになる
V = #1/1/2017#
?IsNumeric(V) ・・・Falseになる
これで困る場面を必死に考えたけど、全く思い当たらなかった。
普通は日付かどうかはVarType()かTypeName()で判定するし、実際どんな時に気に食わないんだろうか。
仕様が気に入らない=>VarTypeの存在を知らなかっただけ?

227デフォルトの名無しさん (JP 0H7f-v8EU)2017/03/21(火) 15:54:46.88ID:xokVubGZH
毎日ID真っ赤にしてる奴はなんなんですかね

228デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/21(火) 16:39:11.35ID:ilj7cuzd0
>>225
見た目上で言えば"42815"の方が#2017/3/21#より整数らしい。それはそうだ。
#2017/3/21#がどんな整数になるかは変換してみるまでわからない。
しかし"型"で言えば常に数値変換できる日付型の方が値によっては数値にならない文字列型より
「数値らしさが上」だろうね。

>>226
IsNumeric=Trueが相応しい型は
Integer, Long, Double, Single, Currency, Date, Boolean だろう。
それを判定するたの条件がめんどくさいじゃないか。

229デフォルトの名無しさん (スップ Sddf-Ma5U)2017/03/21(火) 16:48:21.45ID:62+JQA0Hd
>>228
そうかい。別に否定はしない。

230デフォルトの名無しさん (ワキゲー MM1f-Rf/L)2017/03/21(火) 16:55:27.50ID:anlqUc4mM
>>228
おまえの考える「ふさわしさ」とVBAの仕様は異なってるってだけの話
おまえのふさわしさを発揮したければそのルールを採用している言語で開発すればいい

このスレはVBAの質問スレだ
おまえの理想を語る場ではない

231デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/21(火) 16:59:33.62ID:ilj7cuzd0
>>230
これまでの流れを見てこういう発言をしてるんだがね。。。

232デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/21(火) 17:02:07.12ID:ilj7cuzd0
てゆうかさ、
「IsNumeric(日付型)はTrue であるべきだ」
に賛同の声が集まらないことに驚きを禁じ得ないねw

他の言語ではどうなってんのよ

234デフォルトの名無しさん (ワッチョイ 2374-WisJ)2017/03/21(火) 17:44:02.71ID:eec8ZFhb0
賛同したら仕様が変わるんですかね

235デフォルトの名無しさん (イモイモ Seff-u6wT)2017/03/21(火) 18:18:24.25ID:TjPLkVcte
IsNumeric 関数
https://msdn.microsoft.com/ja-jp/library/office/gg264560.aspx

> 解説
> IsNumeric は、expression 全体が数値として認識される場合は True を返し、それ以外の場合は False を返します。
> expression が日付式の場合、IsNumeric は False を返します。

236デフォルトの名無しさん (JP 0H7f-v8EU)2017/03/21(火) 18:38:56.03ID:xokVubGZH
IsNumeric(#1/1/2000#)がTrueになるべきなら、IsDate(1)もTrueになるべきだな。
・・・そして混沌へ。

237デフォルトの名無しさん (ワッチョイ bfd4-eowZ)2017/03/21(火) 18:42:39.01ID:ImIzgaAk0
質問です。
常に前面配置したユーザーフォームのテキストエリアに、他ブックも含めて現在選択しているセルの値をリアルタイムで反映させたい。
他ブックは、数千単位であって、全部にマクロをかけない。また、他ブックの名前は統一されていない。

ThisWorkbook に、
Private Sub Workbook_Open()
UserForm1.Show vbModeless
End Sub

Sheet1 に、
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
UserForm1.TextBox1.Text = Cells(ActiveCell.Row, ActiveCell.Column)
End Sub

上記で、開いたブックのシート内なら、リアルタイムで書き込める。でも、このselectionchangeイベントは、そのシート内のセル選択にしか反応してくれない。


また、ユーザーフォームのコマンドボタンに、

Private Sub CommandButton1_Click()

Dim telno As String
telno = ActiveWorkbook.ActiveSheet.Cells(ActiveCell.Row, ActiveCell.Column)
UserForm1.TextBox3 = telno

という風に書き込めば、ボタンを押すことで他ブックのセルを選択していても、そのセルの値を書き込める。

ボタンを押さなくても、他ブックのセルを選択することで、リアルタイムに数値を書き込む方法を教えてくだせぇ。

238デフォルトの名無しさん (ワッチョイ 33b2-12+v)2017/03/21(火) 18:51:46.93ID:HrPLjJur0
>>237
Cellsオブジェクトなどは、ブック、シートを省略すると自動的にActiveWorkbook、ActiveSheetが対象となる。
つまり、ヒントをあげるとするなら
Dim WB as Workbook
For Each WB in Workbooks
Debug.Print WB.ActiveSheet.Cells(ActiveCell.Row, ActiveCell.Column)
Next
とすると、現在選択中のアドレスがA1なら開いている全ブックのアクティブシートのA1に記載された値がイミディエイトウィンドウに出力されます。

239デフォルトの名無しさん (ワッチョイ 33b2-12+v)2017/03/21(火) 18:56:53.32ID:HrPLjJur0
>>237
他ブックのSelectionChangeイベントを拾いたい場合、クラスモジュールで
Public WithEvents App As Applicationの定義が必要
説明が面倒なので「WithEvents」で検索して
http://www.geocities.jp/vbaxl/sample/012.html
とかの記事を参考にやってみたまえ

240デフォルトの名無しさん (ワッチョイ bf3c-y/cv)2017/03/21(火) 19:01:18.37ID:jV0Y+t/Y0
>>239
ApplicationレベルでSelectionChangeイベント拾える?

241デフォルトの名無しさん (ワッチョイ bf3c-y/cv)2017/03/21(火) 19:03:08.70ID:jV0Y+t/Y0
イベントに頼らずタイマーで無限ループするか
SheetがActiveになったタイミングでコードを注入するかどっちかかな

242デフォルトの名無しさん (ワッチョイ 53a6-tpgq)2017/03/21(火) 19:06:21.66ID:ilj7cuzd0
>>236
IsNumeric(Empty) → True
Empty = 0 → True
IsEmpty(0) → False

すでに混沌

243237 (ワッチョイ bfd4-eowZ)2017/03/21(火) 19:07:35.61ID:ImIzgaAk0
>>上
今日はもうおうち帰る。上で書いてあること明日試して、上手くできなかったらまたくるます。

SheetがActiveになったタイミングでコードを注入するってのは、メインのブックに戻ってきたときって
ことかな?
ユーザーフォームを最前面に表示しているから、ユーザーフォームを置いているメインのブックはアクティブにはならないんですよね


245デフォルトの名無しさん (ワッチョイ bf3c-y/cv)2017/03/21(火) 19:11:57.70ID:jV0Y+t/Y0
>>243
SheetChangeとかApplicationレベルのイベントを活用する

246デフォルトの名無しさん (ワッチョイ bf3c-y/cv)2017/03/21(火) 19:12:47.23ID:jV0Y+t/Y0
>>244
お、拾えるのね

>>237
ボタンの代わりにタイマーとかで更新しまくればいいんじゃね

タイマーなんて勧めるなよ
最後の最後の最後の手段だろ

249デフォルトの名無しさん (ワッチョイ 531e-tpgq)2017/03/21(火) 19:47:35.23ID:pOexkesp0
日本では禁止されてるからな

250デフォルトの名無しさん (ワッチョイ bf92-WisJ)2017/03/21(火) 23:20:44.64ID:8T5Lb3B40
何度読んでも、ISナメックに脳内変換されてしまう。

251237 (ワッチョイ bfd4-eowZ)2017/03/22(水) 16:53:14.53ID:ZwY56S9Z0
>>239
ありがとう。できたわ。詳しい仕組みはよくわからんけど、意図したとおりに動いてるからいいか。
まさかVBAでオブジェクト指向するとは思わんかったっすわ。

ところで、他ブックからの参照なんて、デフォルトで対応していていいと思うんだけど、あえてしてないのは、
何かデメリットなり不都合なりがあるからなのかね? 教えて239!

252239 (ワッチョイ 33b2-12+v)2017/03/22(水) 17:45:40.05ID:ffkhDjHj0
>>251
俺も最初気持ち悪いとは思ったけど、そういうもんだと覚えるしかないで。

「他ブックからの参照がデフォルトで対応していない」って思った理由が良くわからないけど、
VBAのオブジェクトはApplication>Workbook>Worksheet>RangeやShapeなど・・と階層構造になっているので、モジュールで省略したらすべてActive〜になる。
ThisWorkbookモジュールでRangeと書くとThisWorkbook.ActiveSheet.Rangeと同等になるし
SheetモジュールのRange()はMe.Rangeと同等になる。
VBAのイベント名は固定で勝手に関連付けされるからワークブックの指定なんて出来ないし、強引に他ブックのイベントを拾おうと思うとClassでWithEventsで一風変わった形式になるのも止む終えないかなと思う。

253デフォルトの名無しさん (JP 0H7f-v8EU)2017/03/22(水) 18:19:04.60ID:mdyqPZUSH
>>251
> ところで、他ブックからの参照なんて、デフォルトで対応していていいと思うんだけど、あえてしてないのは、
> 何かデメリットなり不都合なりがあるからなのかね?
究極的には、ビルゲイツの美意識にあわなかったからじゃないかと思う。

ビルゲイツがVBAの仕様レビューをしたときの話:
http://local.joelonsoftware.com/wiki/%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AEBillG%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%E3%81%AE%E3%81%93%E3%81%A8

254デフォルトの名無しさん (JP 0H7f-v8EU)2017/03/22(水) 18:28:40.33ID:mdyqPZUSH
どこかの段階で、イベントを所有者をたどって上に伝播するかどうかが決められたはずだけど、相当早い段階でそれは決まったんじゃないかと思う。
最初のバージョンのVBA(Excel 5.0時代)がすでにそうだったのかも。

イベントが上に伝播すると、上に伝播されると困るところでそれを止めるというコードをいたるところで書かなければならない羽目になったりする。
(javascriptのpreventdefault()とか)

255デフォルトの名無しさん (ワッチョイ bfaa-p9iL)2017/03/22(水) 18:47:07.37ID:3v9b3PRy0
>>253
>Lotusマクロはワークシートのセルに長々と入れられたキーストロークの並び以外の何物でもなかった
んでもねぇ、Lotus123ユーザーだったら分かると思うけどOffice向けソフトウェアとしての出来は圧倒的にLotusが優れていたよ。

256237 (ワッチョイ bfd4-eowZ)2017/03/22(水) 18:48:33.49ID:ZwY56S9Z0
なるほどねぇ。 SelectionChangeの引数に0−2くらいで適応範囲指定できるようにしたらええのに、
とか思ったんだけど、たしかに親子関係考えるとおかしいのかもね。
superさんは偉いということですか。

なんにせよ、やりたいことはできたから良しですわ。ありがとん

257デフォルトの名無しさん (ワッチョイ 33b2-12+v)2017/03/22(水) 18:57:26.31ID:ffkhDjHj0
>>256
Superと言えば、VBAではRange.Parentでシートオブジェクト取れるし、Range.Parent.Parentでブックオブジェクト取れるで!

258デフォルトの名無しさん (ワッチョイ bfaa-p9iL)2017/03/22(水) 19:33:22.68ID:3v9b3PRy0
会社で「今後はエクセル形式で書類を提出してもらう」と言われ、ブラック企業勤めの俺は涙目で
デンコードーに走った。「Microsoft Excel」と書かれたパッケージを見つけて値札を見たら「3,480」に見えたので
即座にレジに持って行ってビックリ、34,800円!
「えっ、そんなに高けえの?」と店員に言ったら苦笑いしながら「ロータスのこれ、良いですよ。マイクロソフトオフィスとの互換性
もバッチリだし」と言われて買ったのがLotusSuperOffice2000だった。7,980円だったと思う。
何が良いって、シート関数がエクセルとはくらべものにならないぐらい優れていて、エクセルのSUMIFとか「なんでこんなクソ高いシロモノが条件一つしか指定出来ねえんだよ」と言いたくなるほどの出来だった。だって、単純な集計処理だったらANDでいくらでも条件をネストできるんだからマクロなんて必要なかったんだ。エクセルだったら当時は二つ以上の条件で合計を出す時は
配列数式?でやるかマクロを書くしか無かった。
個人的な意見だが、ビル・ゲイツは天才営業マンで商人としては凄かったんだろうがソフト屋としては二流なんじゃねえかと。
不味い食い物ばっか売ってるイオングループが日本の小売業界トップなのと被るね。

259デフォルトの名無しさん (スップ Sddf-Ma5U)2017/03/22(水) 20:20:33.14ID:ZF7PxTXkd
会社に個人のMcIntoshを持ち込んで得意気にExcelを使ってるやつがいたなあ

260デフォルトの名無しさん (ワッチョイ 2374-WisJ)2017/03/22(水) 20:23:38.85ID:sbuoUxmo0
Range.Parent.Range.Parent.Range.Parent.Range.Parent.Range

261デフォルトの名無しさん (ワッチョイ bf72-QGOz)2017/03/22(水) 23:32:43.84ID:XGhQwYf/0
範囲選択したセルを画像として保存したい。またグラフも画像として保存したいんだけどいい方法ないかな?
Excel2016使ってます
ネットのマクロいろいろめしてみたけどうまくいかなかった
惜しかったのがあったけど範囲選択したところが拡大されて画像化されちゃった

262デフォルトの名無しさん (ワッチョイ 2374-WisJ)2017/03/22(水) 23:41:35.49ID:sbuoUxmo0
>>261
CubePDFで変換

263デフォルトの名無しさん (ワッチョイ 034c-12+v)2017/03/22(水) 23:46:12.21ID:dFQUDVA10
>>260
With使う時は自身への参照を持っていてくれると綺麗にまとまる場合が多いんだよな。
全てのオブジェクト型に自己参照"This"を実装してほしいくらい。

264デフォルトの名無しさん (ワッチョイ aa92-qwxs)2017/03/23(木) 00:39:31.79ID:fjk8NBgx0
よくわからないけど、
エクセルとロータスにも、
プレステとサターンみたいな争いがあったということですね。
よくわからないけど。

>>261
たぶんもう見てると思うけど、このサイトの方法でできます。
ttp://www.excel-excel.com/tips/vba_186.html

266デフォルトの名無しさん (ワッチョイ aaf2-KZ3C)2017/03/23(木) 02:03:50.76ID:iwKD8Hm60
>>258
Joel on softwareみりゃわかると思うけど、BillGはクソ細かい仕様まで把握していた
ゲイツはExcelとLotusでは西暦の起点が違うことを把握していた
(LotusのチームはビットシフトでごまかしてたがExcelチームはキチンとした、程度の意味)

こりゃプログラマだ

267デフォルトの名無しさん (ワッチョイ aa72-URLc)2017/03/23(木) 06:22:40.54ID:vaDKEBcS0
>>265
これもやってみてうまく動かなかったけどもう一度やってみる!
ありがとー!

268237 (ワッチョイ aad4-zBVa)2017/03/23(木) 13:37:06.70ID:n8VArJDy0
>>257
へぇ〜、そうなんだ。こんなどうでもいいネタにまで付き合ってくれてどうも。

割といろいろできるのんね。所詮ベーシックでしょ、と思ってたわすまんのVBA

269デフォルトの名無しさん (ワッチョイ 2a35-ZYFz)2017/03/23(木) 13:39:30.32ID:bb5P/wmt0
VBAにもともと入ってる定数をあらわす変数の名前って簡単に調べる方法はありますか?
たぶんF2で利用できるオブジェクトブラウザかどこかに載っているのだと思うけど。

・色
黒はvbBlack、赤はvbRedと暗記してるけど、オレンジとか水色とかマイナーな色たちはいちいち調べないといけない。

・Endで移動する方向
→あっ、これはオブジェクトブラウザですぐ見つかった

などなど。

オブジェクトブラウザの下の蘭でクリックできるものがあればEndのように簡単にみつかるけど
そうでないことがよくあったので。

270デフォルトの名無しさん (ワッチョイ 2a35-ZYFz)2017/03/23(木) 13:46:36.51ID:bb5P/wmt0
上の話はいまWordのVBAやってて
RangeのメソッドCollapseには引数が必要でその引数にはWordの元からある定数を指定しないといけない。
でもWordのオプジェクトブラウザの下の蘭には単に「Sub Collapse([Direction])」としか書いてなくクリックできない。
でもここのDirectionにはwdCollapseStartかwdCollapseEndを入れる必要がある。
その調べ方は?

というところでつまづいてて、そういやExcelでもこういう困り方をしたことは多々あったなと思って。

>>269
オブジェクトブラウザでEnumかなんかで調べたら出てこない?
色ならvbColor列挙体じゃなかったっけ
うろおぼえですまんけど

272デフォルトの名無しさん (JP 0Hb6-aw5l)2017/03/23(木) 13:56:50.41ID:1Qddb7ZOH
>>270
IDEでCollapseとタイプしてF1
RTFM

273デフォルトの名無しさん (ワッチョイ 2a35-ZYFz)2017/03/23(木) 13:58:07.78ID:bb5P/wmt0
>>271
ありがとうございます。
はい、excelだとオブジェクトブラウザの左のクラスのところで「XlRgbColor」を調べると
無数の色の定数が知ることができます。
でもそれは色だから簡単に調べることが出来ました。
オブジェクトブラウザでvbRedで検索したらたどりつけたから。

でもそれは色だから簡単に分かったけど
そうじゃない場合はその列挙体に相当する「XlRgbColor」みたいなのをどうやって探すかというのが質問の焦点です。

274デフォルトの名無しさん (ワッチョイ 2a35-ZYFz)2017/03/23(木) 14:05:18.23ID:bb5P/wmt0
>>272
F1押してからCollapseとタイプでは?(ワラ。
あとRTFMとは? you are Really Tallented Fantastic Mathmatician?

>>273
列挙体、定数の具体的な値(vbRedとか)で検索すれば出てくるっしょ
MSDNで検索しても出てくると思うし

値ではないか、名前を検索

277デフォルトの名無しさん (JP 0Hb6-aw5l)2017/03/23(木) 14:10:27.59ID:1Qddb7ZOH
>>274
> F1押してからCollapseとタイプでは?(ワラ
笑ってる暇があったら、試してみたらどうかね

278デフォルトの名無しさん (ワッチョイ 2b44-rs+5)2017/03/23(木) 14:15:12.06ID:LmZ8p62R0
Office アプリケーションの組み込み定数の値を取得する方法
https://support.microsoft.com/ja-jp/help/239930/how-to-obtain-built-in-constant-values-for-an-office-application

279デフォルトの名無しさん (ワッチョイ 2a35-ZYFz)2017/03/23(木) 14:16:20.18ID:bb5P/wmt0
>>275-276
いやさっきのWordの例だとwdCollapseStartやwdCollapseEndを忘れてるから検索のしようがない。
こんな場面はExcelのVBAでもいままでに何回もあった、という話なのですが。
そりゃ色だと知ってるものがあれば検索するという技は使えますが。

280デフォルトの名無しさん (ワッチョイ 2bb2-7HKf)2017/03/23(木) 14:16:37.32ID:UAdpg5mq0
>>273
1.大半の列挙体の名前はエクセルなら「xl」、ワードなら「wd」+メソッド名なので、予想して入力してCtrl+Space
2.1に失敗したらオブジェクトブラウザでメソッド名か、引数名で検索
3.普通にメソッド名でググる
マクロの記録から生成したのであれば、何らかのメンバ名が分かってるわけなので、「wdCollapseStart」をオブジェクトブラウザで検索すれば一発出でるね

281デフォルトの名無しさん (JP 0Hb6-aw5l)2017/03/23(木) 14:20:56.54ID:1Qddb7ZOH
マゾかお前ら。
まずマニュアル見ろよ。

282デフォルトの名無しさん (ワッチョイ 2a35-ZYFz)2017/03/23(木) 14:26:08.56ID:bb5P/wmt0
>>280-281
みんなわたしのやりたいことがわかっていないようだ。
オレはExcelやWordでいろんな作業をするとき数秒から1分くらいでやりたいわけ。
そのときVBAでコードを書いて一瞬で処理したいわけだ。
その一瞬ですますためにコードの引数などで定数の名前を忘れたときに簡単に調べる方法を聞いている。

マニュアルとか検索は、全くの初心者がはじめて事柄を学ぶときに有効。
いま聞いてるのは、やりかたや処理は分かってて、定数の名前を瞬時に知る方法。

なんじゃあそりゃ
自分で勝手にライブラリ作るしかなくねえかそんなの
一覧を取得する方法ならググりゃ出てくるが
ある程度はクラス名とか定数名でわかるように作ってあるんだからもうそっから先はじぶんで工夫する以上のことはできないだろ

284デフォルトの名無しさん (ワッチョイ ea3c-EscV)2017/03/23(木) 15:06:49.95ID:mxf1LURC0
本来はCollapseの定義が
Sub Collapse([Direction]) じゃなくて
Sub Collapse([WdCollapseDirection]) になってればいいんだけどね

オブジェクトブラウザでCollapseで検索にするかDirectionで検索するか
Collapseで検索すれば一番最初にWdCollapseDirectionが出てきた

285デフォルトの名無しさん (JP 0Hb6-aw5l)2017/03/23(木) 15:08:41.10ID:1Qddb7ZOH
>>282
> マニュアルとか検索は、全くの初心者がはじめて事柄を学ぶときに有効。
マニュアルの使い方も知らなかったくせに、何言ってんだか。

> 定数の名前を瞬時に知る方法。
F1で瞬時にマニュアルが開き、すぐにこう書かれてるのを目にするだろう。

> 指定範囲または選択範囲を解除する方向です。WdCollapseDirection定数は、
> 次のいずれかをすることができます: wdCollapseEndまたはwdCollapseStartです。
> 既定値はwdCollapseStartです。

RTFM? ggrks

286デフォルトの名無しさん (ワッチョイ 2bb2-7HKf)2017/03/23(木) 15:14:09.35ID:UAdpg5mq0
>>282
いや、だから一瞬で知りたいときは、wd+メソッド名頭文字打ってCtrl+Spaceだってば。
初見じゃないならこれぐらいできるだろ
それすら暗記できないならおとなしくF1押してマニュアル読んどけ
馬鹿でも10回も繰り返せば覚えるだろう

図形を作成すると同時にその図形にハイパーリンク設定ってどうすればよい?
コード例があればうれしい

288デフォルトの名無しさん (ワッチョイ 2bb2-7HKf)2017/03/23(木) 15:22:44.15ID:UAdpg5mq0
>>287
っマクロの記録・・・
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 233.25, 234, 274.5, 146.25).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection.ShapeRange.Item(1), Address:="C:\aaa.xls"

289デフォルトの名無しさん (ワッチョイ 2bb2-7HKf)2017/03/23(木) 15:25:01.73ID:UAdpg5mq0
>>288
Selectしなくても動いたわ
ActiveSheet.Hyperlinks.Add Anchor:=ActiveSheet.Shapes.AddShape(msoShapeRectangle, 233.25, 234, 274.5, 146.25), Address:="C:\aaa.xls"

290デフォルトの名無しさん (ワッチョイ 66a6-VHv+)2017/03/23(木) 18:21:44.88ID:2WHRd7qq0
>>288
Select Selectionを使わずにオブジェクト変数をつかって書くとどうなりますか

291デフォルトの名無しさん (ワッチョイ aa72-URLc)2017/03/23(木) 23:15:58.88ID:vaDKEBcS0
notesのvba詳しい人いないかな…
Excel vbaでNotesのメールは作れるんだけど添付ファイルが上手くいかない…
新規メールだと出来ないとかなんとか…

292デフォルトの名無しさん (ワッチョイ aa92-qwxs)2017/03/23(木) 23:43:55.59ID:fjk8NBgx0
エクセルファイルがZIPであることを利用した裏技はない?
あるとナイス。

293デフォルトの名無しさん (ワッチョイ 2a35-ZYFz)2017/03/23(木) 23:54:57.19ID:bb5P/wmt0
>>292
エクセル内にいっぱい貼ってある写真や図があれば
それをzipにして回答すればjpgファイルとして一括で取り出せる。

294デフォルトの名無しさん (ワッチョイ 2f4c-7HKf)2017/03/23(木) 23:57:02.96ID:XZ4v6A+b0
>>291
Outlookじゃダメなのか?

>>292
高速読み書き

296デフォルトの名無しさん (ワッチョイ 5774-qwxs)2017/03/24(金) 00:01:31.52ID:caJOMCbq0
>>292
圧縮解凍専用ソフトで再圧縮してファイルサイズを減らして自己満足

297japansoftware.net (ワッチョイ 4a9e-gpEi)2017/03/24(金) 00:21:28.15ID:Ka6sWiwW0
windows シリーズ office シリーズ filemaker シリーズ 最近行い商品についてのキャンペーン, japansoftware.net

298デフォルトの名無しさん (ワッチョイ ea3c-EscV)2017/03/24(金) 02:53:38.32ID:suDsBIm10
>>292
表技だけどgitで差分比較

299デフォルトの名無しさん (ワッチョイ 2f4c-7HKf)2017/03/24(金) 03:07:07.38ID:r1mlMUXS0
裏技ってバグなんかの、仕様書(説明書)内に明記されていない動作を利用した行為だろ。

>>298
実際にやるとほとんど使い物にならないけどね

>>299
説明書には書いてないけど仕様書はわからんな
昔 Excel にあったイースターエッグなんて仕様書なしでできるとは思えないし
てかどこから裏技が?

301デフォルトの名無しさん (スップ Sdea-tG8e)2017/03/24(金) 08:57:26.27ID:cdPP3YHId
ActiveSheet.Activate という命令が必要になる日が来るとは思わなかった

302デフォルトの名無しさん (ワッチョイ 2bb2-7HKf)2017/03/24(金) 10:29:14.81ID:c/RC4PNV0
>>292
既出もあるけど
・バイナリエディタでDPB="〜"をゴニョゴニョ
・WinMergeなどのツールで差分比較
・普通に開くと破損して書式設定などが消滅してしまうファイルの復元
・良くないファイルをxlsxに埋め込んでバラマキ
・埋め込みの画像の一括抽出
ZIPだから〜と言うより、内部構造がXMLだから汎用ソフトが使えるので色々できるようになったとも言う

303デフォルトの名無しさん (ワッチョイ 2b5b-M35h)2017/03/24(金) 15:23:46.17ID:9pPylWGn0
画像のように表1の黄色のデータ部分を参照してグラフ1を作成するコードを教えてください。
http://imgur.com/tUaPTQQ.jpg

>>303
マクロの記録

305デフォルトの名無しさん (スップ Sdea-tG8e)2017/03/24(金) 16:08:20.78ID:cdPP3YHId
>>303
この「計」って何なんだ?

306デフォルトの名無しさん (ワッチョイ 2b99-M35h)2017/03/24(金) 16:33:11.14ID:1dGmf1c20
>>304
やりましたが、そのまま実行しても上手く出来ませんでした

>>305
営業と事務の合計なんですけど、機密保持のため適当に数字を打ってるのでおかしなことになってますが、気にしないでくださいw

>>306
どんなコードになってどこで止まるの?

308デフォルトの名無しさん (ササクッテロリ Spd3-0QwW)2017/03/24(金) 20:33:05.87ID:h+s0FglGp
簡単そうてかなりめんどくさい。

セルA1に数値を入れると、セルB1からある数値が帰るシートがあります。
この時以下のプログラムを簡単にできないだろうか

ただしkは変数で、初期値0とします。
1)
いまA1に値k-0.1,k,k+0.1をそれぞれいれ、B1の値が最大になるときのA1を次のkにする。
1)に戻る

どなたかお願いします。

309デフォルトの名無しさん (ワッチョイ aa72-URLc)2017/03/24(金) 20:34:50.50ID:mVTbO5eq0
>>294
残念ながらNotesしか無理なんだ…

310デフォルトの名無しさん (ワッチョイ ea3c-EscV)2017/03/24(金) 22:11:02.15ID:suDsBIm10
>>308
終了条件は?

311デフォルトの名無しさん (ワッチョイ 8323-Qg45)2017/03/24(金) 22:18:27.74ID:XQ+bYqg60
B1の返ってきた値で条件分岐してkに代入するようにしてループ回せばいいんじゃね?
B1の返る条件が分からないから詳しくはわからんけど

312デフォルトの名無しさん (ワッチョイ 2f14-5sBS)2017/03/24(金) 22:40:22.97ID:4RUE8vp70
プログラミングセンスのない俺がそのまま書いてやったぜ 異論は認める
Sub Main()
Dim i As Long
For i = 1 To 10000
Call saidai
Next i
End Sub
Private Sub saidai()
Dim k As Double, k1 As Double, k2 As Double
Dim b1_1 As Double, b1_2 As Double,b1_3 As Double
Calculate
k = Range("A1").Value
k1 = k - 0.1
k2 = k + 0.1
b1_1 = Range("B1").Value
Range("A1").Value = k1
Calculate
b1_2 = Range("B1").Value
Range("A1").Value = k2
Calculate
b1_3 = Range("B1").Value
If b1_1 > b1_2 And b1_1 > b1_3 Then
Range("A1").Value = k
ElseIf b1_2 > b1_1 And b1_2 > b1_3 Then
Range("A1").Value = k1
ElseIf b1_3 > b1_1 And b1_3 > b1_2 Then
Range("A1").Value = k2
End If
End Sub

313デフォルトの名無しさん (ワッチョイ ea3c-EscV)2017/03/24(金) 22:44:31.10ID:suDsBIm10
>>308
sude codeだけど

A1 = x
B1 = f(x)
の場合
foo = [a, b, c]
bar = [f(a), f(b), f(c)]
A1 = foo[bar.index(bar.max)]

ただA1の値を新しくするやり方だと
終了条件がないとずっと回ってるかもね

314デフォルトの名無しさん (ワッチョイ ea3c-EscV)2017/03/24(金) 22:56:51.04ID:suDsBIm10
>>313
ぶpseudo code

315デフォルトの名無しさん (ワッチョイ 66a6-0QwW)2017/03/24(金) 22:58:10.10ID:0Cra7A6M0
312さんごめんなさい
313さんぐらいのシンプルさが欲しいのですわ

>313
もう少し詳しくお願いします。

316デフォルトの名無しさん (ワッチョイ aa92-qwxs)2017/03/24(金) 23:04:20.85ID:wY6QBO5Y0
>>303
wwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwww

つい今日、俺もそんな表からグラフ作らされたわwwwwwwwwwww
作りにくいったらありゃしないwwwwwwwww

317デフォルトの名無しさん (ワッチョイ ea3c-EscV)2017/03/24(金) 23:45:07.41ID:suDsBIm10
>>315
配列[f(a), f(b), f(c)] の要素の最大値がf(c)なら f(c)のindexが2なので
配列[a, b, c]のindexが2の値をとってc
最大値が2つ以上になった場合どうしたいかによっては違う方法のほうがいいかも

違う方法の一つとしては
[(a, f(a)), (b, f(b)), (c, f(c))]みたいな形にして最大値に対応する入力値を取得するとか
(a, f(a))の型は配列、ディクショナリ、ユーザー定義型とかを使う

318デフォルトの名無しさん (アウアウウー Sa3f-n/U6)2017/03/25(土) 00:05:52.08ID:w0EH7KAWa
test

319デフォルトの名無しさん (アウアウウー Sa3f-n/U6)2017/03/25(土) 00:14:03.67ID:w0EH7KAWa
説明下手で申し訳ないんだけど
すでに開いているブラウザをアクティブにして、プルダウンメニューを選択するものを作りたいんだけどどうしたらいいんだろう・・・
AppActivateでアクティブにするとこまでしか作れてない・・
プルダウンの選択って難しいかな?
使いたいページが3フレーム構造のページなんだけど、何かいい方法ないかな

320デフォルトの名無しさん (ワッチョイ 5774-qwxs)2017/03/25(土) 00:26:53.18ID:qXyaqpvi0
>>319
sendkeys

321デフォルトの名無しさん (アウアウウー Sa3f-n/U6)2017/03/25(土) 00:27:25.30ID:w0EH7KAWa
<select name="month" />
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
<label for="month">月</label>
たとえばボタンクリックしたらAppActivateでアクティブにして、monthの2を選ぶみたいなコードって作れないかな・・

322デフォルトの名無しさん (アウアウウー Sa3f-n/U6)2017/03/25(土) 00:29:26.32ID:w0EH7KAWa
>>320
sendkeysでプルダウン選択できる?
無知ですまん・・
できるとしたらコードの書き方教えて欲しい
321に貼ったmonthの月を選択するプルダウンなんだが

323デフォルトの名無しさん (ワッチョイ 5774-qwxs)2017/03/25(土) 00:42:30.55ID:qXyaqpvi0
>>322
Alt+Tabでウィンドウ切り替え
Tabでフォーカス移動
↓↑カーソルキーでリスト選択
リストの選択肢が半角なら頭文字の入力で一発で飛べる

いっぺん自分でキーボードだけでブラウザを動かしてみ
それをそのままSendKeysで飛ばせばいいだけ

324デフォルトの名無しさん (アウアウウー Sa3f-n/U6)2017/03/25(土) 01:43:39.80ID:w0EH7KAWa
>>323
その方法ではできたんですが、他の方法はないでしょうか?
それだと最後にクリックした場所によってはぜんぜん違う動きをしてしまうので
なるべく確実な方法を取りたかったです、説明不足ですいません
キーボード操作ではなくて直接プルダウンをいじれるコードってないですか

325デフォルトの名無しさん (アウアウウー Sa3f-n/U6)2017/03/25(土) 01:48:39.54ID:w0EH7KAWa
>>323
それか、毎回ブラウザをActiveにした場合に同じ場所へ戻ってTABで移動したりはできないですか?
ページの上部をクリックした場合と下部をクリックした場合では挙動が全く違ってしまうので。それを解決したいんですがいい方法が思いつかなくて・・・

リスト直接指定できないの?

327デフォルトの名無しさん (アウアウウー Sa3f-n/U6)2017/03/25(土) 02:34:33.44ID:Cbf6Eb44a
リストと言いますと?

328デフォルトの名無しさん (ワッチョイ 5774-qwxs)2017/03/25(土) 02:55:27.76ID:qXyaqpvi0
>>324
ページを開く作業とセットで、VBAを起動する前にクリックする場所も決めておく

ブラウザだとリストを選択したあと検索とか送信とか、何かボタンを押して次のページに飛ぶだろ
その次のURLを直接指定するという方法もある
URLの最後にnameとvalueを並べて書けば入力したことになるから

329デフォルトの名無しさん (ワッチョイ 2b44-rs+5)2017/03/25(土) 03:08:14.05ID:S5QLF0+B0
>>319
ブラウザが IEなら IEオブジェクト使えばいいんじゃね?

>>329
>>319
>ブラウザが IEなら IEオブジェクト使えばいいんじゃね?
それ使えば今開いてるページをアクティブの状態にして、プルダウン選んでくれる??
できたらコード教えて欲しい

331デフォルトの名無しさん (ワッチョイ 433c-fuL5)2017/03/25(土) 11:38:50.64ID:RRHIuX+r0
>>330
ありがたいお言葉

ググれカス

getelementsbynameで対象オブジェ決めてvalueかselectedindex書き換える

ドロップダウンリストは開かないけど

333デフォルトの名無しさん (ワッチョイ 2bd4-7HKf)2017/03/25(土) 13:09:52.46ID:pySR9myI0
VBAでエクスプローラーの特定フォルダーを開こうとしています

Dim trag As String

Fol = "c:\myhome\hage\"
Shell "C:\Windows\Explorer.exe" & Fol, vbNormalFocus

エクスプローラーは開くのですが、ディフォルトのフォルダーで開きます。
どこが悪いのでしょうか?

334デフォルトの名無しさん (アークセー Sxd3-6tpp)2017/03/25(土) 14:08:06.46ID:Q4Ej8fyjx
>>330
より先鋭的なお言葉
ビンれかす

335デフォルトの名無しさん (ワッチョイ ee4a-BXGz)2017/03/25(土) 14:16:01.39ID:xdv6un5Q0
>>333
空白が足りないとかアクセス権がないとか

336デフォルトの名無しさん (ワッチョイ 66c8-nnGb)2017/03/25(土) 15:29:43.70ID:DcHCHcD/0
>>330
間違いなくできると思うがWebペ−ジの仕様にもよる。
今ちょっと時間無いんでコード示すとしたら夜になってからだな。
既に開いてるならShellオブジェクトだね。

分かってて使ったりするけど人に対してはSendkeysは絶対に使ってはいけないと俺は言うね。

337デフォルトの名無しさん (ワッチョイ 433c-fuL5)2017/03/25(土) 15:49:28.03ID:RRHIuX+r0
IE操作したいならHTML勉強しろよ

>>333
間に空白いれなくてもie開くのか

ieじゃなくエクスプローラ

340デフォルトの名無しさん (ワッチョイ 2bb2-7HKf)2017/03/25(土) 17:03:59.09ID:rT+BXZwb0
>>333
はい。これで動くはず
Dim trag As String
Fol = """" & "c:\myhome\hage\" & """"
Shell "C:\Windows\Explorer.exe" & " " & Fol, vbNormalFocus

341デフォルトの名無しさん (ワッチョイ 2bb2-7HKf)2017/03/25(土) 17:05:21.81ID:rT+BXZwb0
>>330
ここで答え聞くより普通にググれば大量に資料出てくるんだから応用聞くと思う
キーワード 「vba IE操作」など

342デフォルトの名無しさん (ワッチョイ 2a3c-hXJm)2017/03/25(土) 17:56:27.77ID:Wmnjl+Lx0
>>340
横だけど
Fol = """c:\myhome\hage\"""
Shell "C:\Windows\Explorer.exe " & Fol, vbNormalFocus
じゃダメなの?
もしくは一行で
Shell "C:\Windows\Explorer.exe ""c:\myhome\hage\""", vbNormalFocus
ではダメなの?

343デフォルトの名無しさん (ワッチョイ 2bb2-7HKf)2017/03/25(土) 19:17:16.60ID:rT+BXZwb0
>>342
間違ってるところが分かるように意図的にこうしてるのが分からない?
ベタ打ち1行ならそれでいいよ

344デフォルトの名無しさん (ワッチョイ 2bd4-7HKf)2017/03/25(土) 21:13:51.88ID:pySR9myI0
>>335 >>338 >>340 >>342 返信ありがとうございます。ディフォルトのライブラリが開きます・・・。フォルダーは存在してるのですが・・・。

345デフォルトの名無しさん (ワッチョイ 2bb2-7HKf)2017/03/25(土) 21:28:56.12ID:rT+BXZwb0
>>344
じゃあ試しに "C:\"だけにして試してみなよ。
で、次に"C:\myhome\"という感じでパスを増やす。
それと、最後の\が不要だったカモシレナイ。
ついでに、 fso.FolderExits(パス)とかで、”本当に!”パス打ち間違えてないか確認したら?

346336 (ワッチョイ 66c8-nnGb)2017/03/25(土) 23:25:29.86ID:DcHCHcD/0
IEならF12キー押してメニュー下のボタンの中から[要素の選択]ってのを
押してから目的のボタンをクリックするとHTMLの中から該当の部分を表示してくれる。

その中でid属性、name属性なんかを基にプログラム上で目的のオブジェクトを取得して操作する。
取得や操作はDOMを勉強してくれ。
今回のサンプルではhttp://www.htmq.com/html/select.shtmlを利用させて頂いた。

https://www.friendpaste.com/42laVRyz5iwMFqn7Lx6g7S

347デフォルトの名無しさん (ワッチョイ aa92-qwxs)2017/03/25(土) 23:35:26.21ID:qZDjxVVm0
エクセルにはまって以降、
デザエモンはすっかりやらなくなってしまった。

348デフォルトの名無しさん (ワッチョイ 2a35-ZYFz)2017/03/26(日) 10:23:26.80ID:keGLAbPN0
デザエモンとは?

349デフォルトの名無しさん (ワッチョイ 1bd5-7HKf)2017/03/26(日) 19:33:27.18ID:9vl54wzV0
http://home.att.ne.jp/zeta/gen/excel/c04p04.htm
を参考にVBAで音を鳴らすプロシージャを作成していますがエラーを解決できません。
どこをどう直せばいいでしょうか?

上記URLの"メモリ上のバッファから再生〜"で紹介されているコード:Public Function ReadSoundBuffer()を、
再生するファイルを引数で渡すように変更したのですがエラーが出てしまいます。
"Visual Basic でサポートされていないオートメーションが変数で使用されています。"

350デフォルトの名無しさん (ワッチョイ 1bd5-7HKf)2017/03/26(日) 19:35:20.92ID:9vl54wzV0
コードは以下の通りです。どこがまずいでしょうか?

Option Explicit

Public Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" ( _
ByRef pszSound As Byte, _
ByVal hmod As Long, _
ByVal fdwSound As Long _
) As Long
Public Const SND_ASYNC = &H1
Public Const SND_MEMORY = &H4

Public Snd_1() As Byte, Snd_2() As Byte, Snd_3() As Byte

Public Sub test() '←これを実行すると・・・

Call ReadSoundBuffer(Snd_1, "C:\RSSを取得(SSD)\wav files\1分 安値.wav")
'Call ReadSoundBuffer(Snd_2, "C:\RSSを取得(SSD)\wav files\2分 安値.wav")
'Call ReadSoundBuffer(Snd_3, "C:\RSSを取得(SSD)\wav files\3分 安値.wav")

PlaySound Snd_1(0), 0, SND_ASYNC + SND_MEMORY
'PlaySound Snd_2(0), 0, SND_ASYNC + SND_MEMORY
'PlaySound Snd_3(0), 0, SND_ASYNC + SND_MEMORY

End Sub

351デフォルトの名無しさん (ワッチョイ 1bd5-7HKf)2017/03/26(日) 19:35:58.63ID:9vl54wzV0
Public Function ReadSoundBuffer(SndBuf, strFileName)

Dim WrkSndFile As String
Dim WrkNumber As Long

WrkSndFile = strFileName
WrkNumber = FreeFile()
Open WrkSndFile For Binary As WrkNumber
ReDim SndBuf(LOF(WrkNumber))
Get WrkNumber, , SndBuf '←ここでエラー。"Visual Basic でサポートされていないオートメーションが変数で使用されています。"
Close WrkNumber

End Function

352デフォルトの名無しさん (エーイモ SEa2-BRuG)2017/03/26(日) 21:46:16.16ID:6MyN9wgWE
>>349
引数の型指定がされていないからじゃない?

Public Function ReadSoundBuffer(SndBuf, strFileName)

Public Function ReadSoundBuffer(SndBuf() As Byte, strFileName)

353デフォルトの名無しさん (ワッチョイ 1bd5-7HKf)2017/03/26(日) 22:36:58.07ID:9vl54wzV0
>>352
あー、エラーでない すごいー
今まで呼び出される側の引数の型を省略すること多かったし、引数が配列のときに()を省略しても問題がおきたことなかったのに・・・
どういうときに省略で問題でてくるんだろ???

354デフォルトの名無しさん (ワッチョイ 1bd5-7HKf)2017/03/26(日) 22:37:27.60ID:9vl54wzV0
>>352
ありがとうございました

355デフォルトの名無しさん (ワッチョイ aaa8-7HKf)2017/03/26(日) 23:05:55.58ID:zZzO0lh00
また Variant論争が起こる悪寒 w

直したの関数の型指定だな

あ、引数でいいのか

358デフォルトの名無しさん (ワッチョイ 53a6-VHv+)2017/03/26(日) 23:18:02.88ID:NX2FjwOv0
MSDNでGet ステートメントの説明を読んだがわかりにくいのう

359デフォルトの名無しさん (ワッチョイ 1bd5-7HKf)2017/03/26(日) 23:23:54.74ID:9vl54wzV0
>>355
触れてはいけない話題でしたか、すいません
論争は望んでなくて、呼び出される側に、どんなとき()が必要でどんなとき引数の型指定が必要か知りたかっただけなんです

360デフォルトの名無しさん (ワッチョイ 53a6-VHv+)2017/03/26(日) 23:32:53.42ID:NX2FjwOv0
>>359
MSDNのここじゃないかな


メモ
Get ステートメントを使用して、バリアント型 (Variant ) の配列をディスクから読み取ることはできますが、
Get を使用して、配列が含まれるスカラーのバリアント型 (Variant) を読み取ることはできません。
また、Get を使用して、オブジェクトをディスクから読み取ることもできません。

361デフォルトの名無しさん (ワッチョイ 53a6-VHv+)2017/03/26(日) 23:52:44.25ID:NX2FjwOv0
そのMSDNに
「バリアント型 (Variant) の VarType を識別する 2 バイトが読み取られた後に・・・」って記述があるじゃろう。

SndBuf() As Byte と書かないと、ByRef SndBuf As Variant と解釈されるが、その場合上記の
VarTypeは、要素の型を表す本来の値(Byteなら17)と VT_BYREF(0x4000) の bit or になるんだよ。
「VT_BYREF」ってのは他の型の値を参照してますよ、ってフラグ。

多分Getステートメントはそういう状態に対応していないってことなんじゃないかな。

何も考えずに型を書けばいいだけ
Variantなどというクソに頭を悩ませる必要はない

Variantはどうしても必要なとき以外は使わないってのが基本でいいと思う
あやまってbyte型じゃない値を入れても型が違うよってエラーが出てくれるから問題箇所も発覚させやすい
Byteより大きい値を入れる可能性があるなら関数の使い方を考え直さないと

364デフォルトの名無しさん (スップ Sdea-tG8e)2017/03/27(月) 07:47:43.67ID:Sygej3yfd
Variantを使わないとコピペの嵐になるときとかがそうだな

>>364
でも結局関数の中で型を確定させるよね、その場合も
オブジェクト指向サポートしてる言語だとオーバーライドだっけ?なんかゴニョゴニョ出来るみたいだけど

366デフォルトの名無しさん (ワッチョイ 2bb2-7HKf)2017/03/27(月) 12:01:35.84ID:F/9rdJuK0
人は同じ過ちを何度でも繰り返す。

367デフォルトの名無しさん (ワッチョイ 2f4c-7HKf)2017/03/27(月) 13:50:33.97ID:D0Ly+ln50
エラーの出る場所が違うだけで、Variant型使わなければ防げるエラーなんてないんだけどね。

368デフォルトの名無しさん (スップ Sdea-tG8e)2017/03/27(月) 14:23:16.95ID:Sygej3yfd
>>367
たとえば ByRef a As Long に Long じゃない変数を代入しようとするとコンパイルエラーになる。

369デフォルトの名無しさん (ワッチョイ 2a35-ZYFz)2017/03/27(月) 14:33:19.30ID:z/XZODDJ0
Sub test()
Dim i As Integer
i = 5
Dim a(i) As String


End Sub
---------------------

これがダメなのはルールとして分かりましたわ。
でもこれをダメというルールにしてしまった理由はなんですか?

370デフォルトの名無しさん (ワッチョイ 2f4c-7HKf)2017/03/27(月) 14:36:29.68ID:D0Ly+ln50
>>368
Long型以外の値が紛れ込む余地があったら実行時にエラーになるし、
Long型以外の値が紛れ込む余地が無かったらVariant型でもエラーにならないだろ。

371デフォルトの名無しさん (ワッチョイ 2f4c-7HKf)2017/03/27(月) 14:39:37.86ID:D0Ly+ln50
>>369
実行時に値が確定してるかどうかの差じゃないの。

Const i = 4

Sub test()
Dim c(i) As String
Debug.Print UBound(c)
End Sub

だとエラー出なかったし。

372デフォルトの名無しさん (スップ Sdea-tG8e)2017/03/27(月) 14:43:43.63ID:Sygej3yfd
>>370
余地?
俺は引数の型についてVariantかそうじゃないかの話をしてるんだけど?

373デフォルトの名無しさん (ワッチョイ 2f4c-7HKf)2017/03/27(月) 15:05:20.07ID:D0Ly+ln50
>>372
そうか。するとコンパイルエラーがどうこうというレスだけだと君の主張がよく分からないな。
俺は引数の型がVariant型かどうかについて限って話してるわけではないから、もしかして違う話題かな?

374デフォルトの名無しさん (ワッチョイ 2bb2-7HKf)2017/03/27(月) 16:09:12.72ID:F/9rdJuK0
>>369
理由もなにも固定長配列と動的配列の違い。
つまりメモリ確保のタイミングの問題だね。
Dim(定数)は固定長配列なんだから、当然変数を渡したら「定数式が必要です。」となる。

Dim (定数)はプロシージャに入って初めて通過したときにメモリを確保する。
トレースで矢印を動かして再度Dim(定数)を通っても変数は初期化されない。

Dim() As Stringと書いた場合はメモリを確保しないが、ReDim(i)を通るたびにメモリを再確保する。
トレースで矢印を動かして再度ReDim(数値)を通ると変数は初期化される。

一度固定長配列として宣言した変数は、動的配列にすることはできない
Dim b(10) As String
ReDim b(i)
エラー「配列は既に宣言されています。」

これでいいだろうか

コンパイルエラーと実行時エラーだったらコンパイルエラーの方が未然に防げるだろ
値によって変わるんじゃなくて型チェックの時点で防げるんだから
さすがにこれは明白すぎるぞ

376デフォルトの名無しさん (JP 0Hb6-aw5l)2017/03/27(月) 18:00:25.62ID:BGS+rNUAH
>>371,374
そういうことを聞くたいんじゃなくて、>>369のコードを駄目ということにした理由が知りたいんじゃないかな。
別に駄目じゃなくてOKということにしてもいいのに、なんで駄目というルールにしたんですかという疑問。

俺は知らないけど。

変数宣言するのに変数を使えるのはなんか気持ち悪いから
コンパイルの時にチェックしてるんじゃないの、知らんけど

378デフォルトの名無しさん (JP 0Hb6-aw5l)2017/03/27(月) 18:17:07.67ID:BGS+rNUAH
>>377
なるほど!と思って試してみたら、範囲外エラーは実行しないとエラーにはなりませんでした。
dim a(5) as long
a(6) = 1 ' <- コンパイルではエラーにはならない

379デフォルトの名無しさん (ワッチョイ 2f4c-7HKf)2017/03/27(月) 18:25:08.74ID:D0Ly+ln50
コンパイルエラーってあんまり頼りにならないんだよね。
コンパイルエラーで分かるものって実行時エラーでも分かるけど、その逆ってないし。

>>376
ぶっちゃけ言語仕様決めた奴の好みだろ

381デフォルトの名無しさん (スフッ Sd4a-qwxs)2017/03/27(月) 18:34:09.03ID:wdUXzV9Gd
>>379
コンパイルできないのに実行できるコードがあるわけないだろ

382デフォルトの名無しさん (ワッチョイ 2bb2-7HKf)2017/03/27(月) 19:00:18.34ID:F/9rdJuK0
>>379
言ってることが意味不
VBAのコンパイルエラーは言語仕様に合ってて、機械が翻訳可能か検証してるだけだし、
実行時エラーは実際に実行した時のメモリアクセスやらなんやらのエラーだろう。
確かに>>378の文はコンパイルエラーで拾ってほしいけど、VBAにそこまで期待してはいけない。

VBAはコンパイラが貧弱すぎるからVBAしか使わない人達はいまいち静的型付けの御利益を実感できないんだろう
他のまともな静的型付け言語を体験するともうVBAに嫌気がさしてくるよ

384デフォルトの名無しさん (スップ Sdea-tG8e)2017/03/27(月) 19:33:21.64ID:Sygej3yfd
>>379
確かに気休めにしかならない

func(ByRef x As Long)
があるとして、

Dim a As Variant : a = 5
func(a)
はコンパイルエラーになってくれるけど
func(a + 0)
だと通る

385デフォルトの名無しさん (ワッチョイ aacf-O03j)2017/03/27(月) 20:15:45.93ID:0qOI+dR00
そもそもVBAってコンパイルするのか?インタプリタだと思ってたよ。

386デフォルトの名無しさん (ワッチョイ aaa8-7HKf)2017/03/27(月) 20:37:13.86ID:VgJTF0Ub0
>>385

VBEのデバッグにコンパイルってあるけど、あれは単に文法チェックをだけだろ
と思ってたんだけどね
>>47
みたいな話が

387デフォルトの名無しさん (ワッチョイ fe1f-n/U6)2017/03/27(月) 20:50:17.08ID:v6c3i5dM0
初心者からの質問です。

「今日の上がり」というシートを「集計マクロ」というエクセルシートに取り込みたいのですが、
今日の上がりシートをダウンロードすると、時々
「今日の上がり(1)」とかって、(1)とかついたりします。
今書いたコードだと、その括弧のない場合でしか取り込めなく、
括弧がついてしまった場合だとエラーが起きてしまいます。
こういう場合はどうコードを書き直せばいいですか?

今使ってるコード↓

Workbooks("今日の上がり").Sheets("今日の上がり").copy_
After:=Workbooks("集計マクロ").Sheets("集計マクロ")

388デフォルトの名無しさん (ワッチョイ 5774-qwxs)2017/03/27(月) 20:53:42.71ID:jq8UKNgK0
Workbooks("今日の上がり(1)").Sheets("今日の上がり").copy_
After:=Workbooks("集計マクロ").Sheets("集計マクロ")

389デフォルトの名無しさん (ワッチョイ 2f4c-7HKf)2017/03/27(月) 20:55:12.69ID:D0Ly+ln50
>>387
Sub test()
For Each x In Workbooks("今日の上がり").Worksheets
If x.Name Like "今日の上がり*" Then
x.Copy after:=Workbooks("集計マクロ").Sheets("集計マクロ")
End If
Next
End Sub

こんな感じかな

390デフォルトの名無しさん (ワッチョイ 2bb2-7HKf)2017/03/27(月) 20:59:18.59ID:F/9rdJuK0
>>387
2パターンしか存在しないなら、エラー処理サブルーチンを組むとか。
sub aaa()
 '前処理
 On Error Goto LabelError
 Workbooks("今日の上がり").Sheets("今日の上がり").copy_
 After:=Workbooks("集計マクロ").Sheets("集計マクロ")
 Goto LabelSkip
LabelError:
 Workbooks("今日の上がり(1)").Sheets("今日の上がり(1)").copy_
 After:=Workbooks("集計マクロ").Sheets("集計マクロ")
 Resume Next
LabelSkip:
 '後処理
End Sub
でも>>389のほうが美しいな

391デフォルトの名無しさん (ワッチョイ fe1f-n/U6)2017/03/27(月) 21:14:05.14ID:v6c3i5dM0
>>387です。
>>388-390
さっそくのご回答ありがとうございます!
(2)になったり(3)になったりでパターンは変わるようです。
>>389さんのが*がついてて、どのパターンにも対応が出来そうなので試してみます。
まだ色々分からない点があるので、また後日来ます。
ありがとうございました。

392デフォルトの名無しさん (ワッチョイ aa72-URLc)2017/03/27(月) 21:21:36.05ID:BYe152/p0
他ブックから参照してる外部データのリンクをマクロで再度更新ってできないのかな?
activeWorkbook.RefreshAllでは無理だった…

393デフォルトの名無しさん (ワッチョイ 2bb2-7HKf)2017/03/27(月) 21:46:23.45ID:F/9rdJuK0
>>392
んー再計算なら、
Application.CalculateFullRebuild
を試してみては?

394デフォルトの名無しさん (ワッチョイ 2b44-rs+5)2017/03/27(月) 23:05:28.25ID:TaZ9cxx50
>>392
ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources

395デフォルトの名無しさん (ワッチョイ 1bd5-7HKf)2017/03/27(月) 23:12:49.26ID:bKKFLlTl0
>>360>>361
ありがとうございます。でもこのMSDNの記述は私の理解を遥かに越えています
>>362>>363
呼び出される側の型省略は今後やめます、今回で凝りましたw

396デフォルトの名無しさん (ワッチョイ aa92-qwxs)2017/03/27(月) 23:28:18.52ID:Mw0tASpV0
>Get を使用して、配列が含まれるスカラーのバリアント型 (Variant) を読み取ることはできません。

スカラー波wwwwwwwwwwwwwwwwwwwwwwww

397336 (アウアウカー Sa1b-nnGb)2017/03/28(火) 12:27:19.23ID:5xPrq2Fua
>>374
いや、それ違う。
どっちも静的配列だ。

定数は実行前に置き換わるからだろ。

398デフォルトの名無しさん (スップ Sdea-tG8e)2017/03/28(火) 13:12:16.29ID:4cdxOmGyd
ReDimできるものが静的配列のわけはないよ

399デフォルトの名無しさん (スップ Sdea-tG8e)2017/03/28(火) 13:19:30.09ID:4cdxOmGyd
>>365

' 配列 x のサイズを計算する関数
 If IsArray(x) Then
  size = UBound(x) + LBound(x) + 1

これは型を確定させる必要はないし ByRef Variant じゃないと受けられない

遅レススマ

400デフォルトの名無しさん (ワッチョイ 2bb2-7HKf)2017/03/28(火) 13:22:58.79ID:RFK8HgDl0
>>397
>どっちも静的配列だ。
ん?Dim(5)が静的でDim()→Redim(n)が動的でしょ。
そりゃnが定数なら静的っぽく使えるけど、Preserveできるから結局は動的でしょうVBAでは。
http://officetanaka.net/excel/vba/variable/08.htm
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_050_11.html
俺の解釈が間違ってるならもう詳しい解説おしえてほしいな

>定数は実行前に置き換わるからだろ。
当たり前すぎて何を言いたいのか分からない。

401デフォルトの名無しさん (JP 0Hb6-aw5l)2017/03/28(火) 13:39:54.81ID:uzRike2TH
>>386
コンパイル関連の仕組みとして、この記事を見つけたので、興味があればどうぞ。
http://cpap.com.br/orlando/VBADecompilerMore.asp

VBA CODE DECOMPILER AND COMPACTORというツールの紹介と、解説記事
* Features
* Download
* What it means to decompile and compact in VBA
* Advantage of saving decompiled and compacted VBA code
* Good practices to increase stability in VBA codes
* New Office 2007 and later (32 and 64-bit)
* Executing via Command Line

402デフォルトの名無しさん (ワッチョイ aa72-URLc)2017/03/28(火) 20:53:44.53ID:gtx5yoip0
>>393>>394
ありがとう!
うまくいったー!

403デフォルトの名無しさん (ワッチョイ ea3c-EscV)2017/03/28(火) 21:23:48.83ID:5RUVNWwS0
>>400
一般用語の動的配列ではないけど
VBA用語では動的配列ってことでしょ

404336 (アウアウカー Sa1b-nnGb)2017/03/28(火) 22:12:24.05ID:y6dX2FWHa
>>400
スマン。
>>369>>371の違いを説明してると勘違いした。

405デフォルトの名無しさん (ワッチョイ 53a6-VHv+)2017/03/28(火) 22:16:58.20ID:QvJjdHfs0
静的な配列は欲しい。

しかし、
Dim i As Integer : i = 5
Dim a(i) As String
を静的にするのはどうにも無理だった。

というだけのことなんじゃないかな。

406デフォルトの名無しさん (ワッチョイ fe1f-n/U6)2017/03/28(火) 22:39:27.90ID:7XREnoOE0
>>387です。
昨日はコードを教えてくれてありがとうございました。
>>389さんのコードでやってみたのですが、上手くいかないです・・・。

すいません、自分の説明不足だったのですが、
(1)とか(2)とかってつくのはファイル名(ブック名?)でした。
>>389さんの場合だとシートだと上手くいくのですが・・・。

Workbooks("今日の上がり").Sheets("今日の上がり").copy_
After:=Workbooks("集計マクロ").Sheets("集計マクロ")

407デフォルトの名無しさん (ワッチョイ aa92-qwxs)2017/03/28(火) 22:40:20.27ID:dxleZkXF0
二次元配列のReDim Preserveって、最後の次元しか変更できないんじゃ使い道無いじゃん、と思ったが、
縦と横を入れ替えればいいんじゃん。

って思ったが、やっぱり慣れないから見づらいじゃん。

408デフォルトの名無しさん (ワッチョイ fe1f-n/U6)2017/03/28(火) 22:42:12.74ID:7XREnoOE0
追記

今日一応ワイルドカードとかつけて色々試したのですが、ダメでした。
>>389さんのだと、「インデックスが有効でありません(エラー番号:9)」と出てしまいます。

>>407
WorksheetFunction.Transposeを使うパターンだけど1行だった時は1次元配列になっちまうんだよなあ。

410デフォルトの名無しさん (ワッチョイ fe1f-n/U6)2017/03/28(火) 22:47:43.31ID:7XREnoOE0
追記:仮に「今日の上がり(1)」を取り込もうとすると

Sub test()
For Each x In Workbooks("今日の上がり").Worksheets  ←ここでエラーが出てしまいます。
If x.Name Like "今日の上がり*" Then
x.Copy after:=Workbooks("集計マクロ").Sheets("集計マクロ")
End If
Next
End Sub

411デフォルトの名無しさん (ワッチョイ 53a6-VHv+)2017/03/28(火) 22:47:53.39ID:QvJjdHfs0
>>407
Yes
そういう時はオブジェクトの列にするか配列の列にするのかも

412デフォルトの名無しさん (ワッチョイ 5774-qwxs)2017/03/28(火) 22:47:59.33ID:wdEWQ5Te0
Dirでファイル名を確定させてから処理すればいいんでない?

BookName = Dir("今日の上がり*.*")
If BookName <> "" Then
Workbooks(BookName).Sheets("今日の上がり").copy_
After:=Workbooks("集計マクロ").Sheets("集計マクロ")
End If

>>408
Sub test()
For Each x In Workbooks("今日の上がり").Worksheets
If Instr(x.Name, "今日の上がり")>0 Then
x.Copy after:=Workbooks("集計マクロ").Sheets("集計マクロ")
End If
Next
End Sub

でどうだ?

414デフォルトの名無しさん (ワッチョイ fe1f-n/U6)2017/03/28(火) 22:50:51.66ID:7XREnoOE0
>>412
「今日の上がり」と「集計マクロ」は両方開いたままの状態なのですが。
Dirって使えるんですか?
Dirって対象のファイルが閉じてる時じゃないと使えないとかありますか?
(初心者ですいません)

415デフォルトの名無しさん (ワッチョイ fe1f-n/U6)2017/03/28(火) 22:53:02.48ID:7XREnoOE0
>>413
今日の上がり(1)を取り込もうとしたとき、

Sub test()
For Each x In Workbooks("今日の上がり").Worksheets  ←ここでエラーが出てしまいます。
If x.Name Like "今日の上がり*" Then
x.Copy after:=Workbooks("集計マクロ").Sheets("集計マクロ")
End If
Next
End Sub

最初の一行目で既にエラーなのですよね・・。
>>413さんのは2行目からは今までとは違いますが・・。
(今手元にその集計ファイルがないんで出来なくてすいません)

416デフォルトの名無しさん (ワッチョイ 53a6-VHv+)2017/03/28(火) 23:04:34.16ID:QvJjdHfs0
>>414
普通に
For Each x In WorkBooks
If x.Name Like 〜
でいいように思えてならないが?

417デフォルトの名無しさん (ワッチョイ fee2-VHv+)2017/03/28(火) 23:07:19.26ID:r9lC3srD0
x.Sheets("今日の上がり").Copy after:=Workbooks("集計マクロ").Sheets("集計マクロ")
も修正

418デフォルトの名無しさん (ワッチョイ fe1f-n/U6)2017/03/28(火) 23:14:26.90ID:7XREnoOE0
>>416
シートならそれでも上手く行くんですよね。
ですが、ファイル名が変わると出来なくなるみたいです。

419デフォルトの名無しさん (ワッチョイ 2b44-rs+5)2017/03/28(火) 23:34:59.25ID:jSAv5Xa30
>>418
>>416 さんので良いと思うのだが
どうダメなの?

ブック名とシート名が同じだから混乱してないか?

420デフォルトの名無しさん (ワッチョイ 2f4c-7HKf)2017/03/28(火) 23:44:34.14ID:OuWj1GSF0
>>406
Const コピー元ワークブック名 = "今日の上がり"
Const コピー元ワークシート名 = "今日の上がり"
Const コピー先ワークブック名 = "集計マクロ"
Const コピー先ワークシート名 = "集計マクロ"

Sub test()
For Each x In Workbooks
If x.Name Like ワークブック名 & "*" Then
For Each y In x.Worksheets
If y.Name Like ワークシート名 & "*" Then
y.Copy after:=Workbooks(コピー先ワークブック名).Sheets(コピー先ワークシート名)
End If
Next
End If
Next
End Sub

こういうこと?

421デフォルトの名無しさん (ワッチョイ fe1f-n/U6)2017/03/29(水) 06:02:01.50ID:rjGgE2Ur0
>>387です。
みなさんありがとうございます。
みなさんの教えてくれたコードで一旦試してみます。

>>419
ブック名とシート名が同じなのでオカシクなってる可能性はありますね・・。

>>421
プログラムはそんなことで混乱しません。
あなたが混乱しているのでは?という意味だろ。

それぞれのサンプルを一行ずつどういう意味なのか考えれば、最初のサンプルで解決できた筈だよ。
ブックの中の全てのシートを見ていって、該当する名前のシートかどうかを調べるサンプルなんだから同じように全てのブックを見ていって、該当する名前のブックかどうかを調べるコードを書くだけだ。
それが>>416さんの方法だ。

423デフォルトの名無しさん (ワッチョイ aaa8-7HKf)2017/03/29(水) 17:48:34.37ID:8sw2I1PH0
>>401
難しくてなんのこっちゃよく判らんけど、探し出してきてくれてありがとです。 w

424デフォルトの名無しさん (ワッチョイ 2bb2-7HKf)2017/03/29(水) 19:09:46.40ID:2Prvi8gF0
>>423
調べてみたらxlsファイルの中に、VBAをコンパイルしたデータ(pコード?)が保存されてて、その情報を削除してくれるツールのようだね
RelaxToolみたいに結構な量のマクロが入ったアドインの容量削減に使うと良いみたい。

425デフォルトの名無しさん (ワッチョイ fe1f-n/U6)2017/03/29(水) 23:15:25.05ID:6GdUSfve0
>>387です。
皆さんからのアイデアを基に色々やったら出来ました!
ありがとうございます。

426デフォルトの名無しさん (ワッチョイ efa6-agmj)2017/03/30(木) 00:10:16.15ID:mBKkA2D60
テーマの配色をオリジナルな色で登録したいのですが
VBAでユーザー定義を登録できますか?
http://officetanaka.net/excel/vba/cell/04-24.png

427デフォルトの名無しさん (ワッチョイ b344-+x88)2017/03/30(木) 13:08:29.68ID:30CSYY0X0
>>426
可能だと思うぞ

ActiveWorkbook.Theme.ThemeColorScheme.Colors(msoThemeAccent1) = RGB(68, 114, 196)
みたいに全12色を指定して
ActiveWorkbook.Theme.ThemeColorScheme.Save メソッドで保存してやればいいんじゃね?

428デフォルトの名無しさん (ワッチョイ bf92-6pw6)2017/03/30(木) 21:08:04.93ID:iwCySJpZ0
セルしちゃった・・・。

429デフォルトの名無しさん (ワッチョイ efa6-agmj)2017/03/31(金) 01:49:31.89ID:IGtHDLym0
>>427
ありがとうございまーす
おかげでWebから拾ってきたオリジナル配色で
グラフをサクッとつくれるようになりました

430デフォルトの名無しさん (ワッチョイ bf35-/Gsh)2017/03/31(金) 12:18:06.90ID:ZJxHm11l0
参照設定のしくみって深い話どうなってるのですか?

例えばWordの参照設定をしないと
変数の型にWord.Applicationは使えずObjectにしなければならないし
あと不思議なのはインスタンス化のときにCreateObject("Word.Application")だとできるけどNew Word.Applicationだとできない(参照設定しないと)。

431デフォルトの名無しさん (ワッチョイ bf35-/Gsh)2017/03/31(金) 12:21:02.50ID:ZJxHm11l0
あとExcelにあるデータを使ってメールの下書きを作るため
ExcelからOutlookを操作するVBAマクロを作るとき
メール本文はテキストしかできないんですか?
メール本文に好きなフォントを使ったりフォントサイズを変えたり太字にしたり色を付けたりしたいのですが。

432431 (ワッチョイ bf35-/Gsh)2017/03/31(金) 12:24:45.91ID:ZJxHm11l0
現状BodyプロパティじゃなくHTMLBodyプロパティを使わないと無理っぽそうなので
ExcelのCellそのままのRangeデータを引数にし<font size=・・・>・・・・</font>のStringテキストを返す関数を作ろうか検討してますが
そんなクソ面倒なことをしないといけないのでしょうか?

もしそうならだれかこの関数作って。

>>431
詳しくはわからんが、Outlookの設定でリッチテキストにもHTMLにも出来るんだからできるんじゃねえの
なんかのプロパティあるだろたぶん


435デフォルトの名無しさん (ワッチョイ bf35-/Gsh)2017/03/31(金) 12:59:33.36ID:ZJxHm11l0
>>433
いや、たとえリッチテキストやHTMLに変更することはできてもメール本文に書式付きの文字列をコピーする方法がないのです。
なんかのプロパティがあるはずだとは思ったけどそれが無いのです。地道にHTMLBodyプロパティを使って地道にHTMLタグを自作するしかないかも。

>>434
ありがとうです。これから読んでみます。

436デフォルトの名無しさん (ワッチョイ bf35-/Gsh)2017/03/31(金) 13:02:12.14ID:ZJxHm11l0
わたしは意識高い系の人でメールの書式をきれいにして送っているのでこの人のメールは美しいと評判ですが
せっかくマクロで自動化してメール送信を用意にしてもメール書式がくずれてプレインテキストになってその評判を落としたくないのです(ワラ。

437デフォルトの名無しさん (ワッチョイ 834c-QmV0)2017/03/31(金) 13:15:40.60ID:Vd7f1stm0
Excelから間接的にやるんじゃなくてOutlookVBAで直接操作すれば大抵の事は出来そう。

>>435
2010 以降ならMailItem.RTFBody があるはず
あと MailItem.BodyFormat の設定も必要

439デフォルトの名無しさん (ワッチョイ bf92-6pw6)2017/03/31(金) 22:48:00.08ID:33Dx4ceV0
>>434
参照設定しないと動かない、というならわかるんだけど、
参照設定しなくても動く、というのがわからない。

設定してもしなくても、結局は参照してるんじゃないのかと思うんだが。

>>439
VBEの機能とするか、コード上で機能させるかで違うんじゃねえの

441デフォルトの名無しさん (ワッチョイ bf92-6pw6)2017/03/31(金) 23:09:50.94ID:33Dx4ceV0
>>440
ごめん、説明不足だった。
よく、配布するなら参照設定しないようにって書いてるサイトを見るけど、
結局は外部のソフトの機能使ってるんじゃないのかと。

442デフォルトの名無しさん (ワッチョイ bf3c-3MUK)2017/03/31(金) 23:36:24.36ID:XL9Ub2rN0
>>439
Word.Application という型を使おうとしたらコンパイル時に型がわかっていないとダメなので参照設定が必要(アーリーバインディング)
CreateObject("Word.Application") は実行時に型を参照するので事前の参照設定は必要ない(レイトバインディング)
基本的にアーリーバインディングでいいけど例えばワードが入ってない環境で使われる可能性がある時はレイトバインディングでやる必要がある

コードだけを提示する場合に動かないぞゴルァということになるのが嫌だから実行時バインディングにしたりする。
コメントに参照設定書いとけばいいんだけどね。
Evaluation: Good!

444デフォルトの名無しさん (ワッチョイ b376-kVPK)2017/04/01(土) 02:12:14.50ID:cp737xtH0
>>442
レイトバインディングは当たり前だけど使う側のメソッドやプロパティが
インテリセンスに反映されないから出来れば使いたくないんだけど
どうしても使わなければならない場合が意外に多いからね。

これは逆にEXCELを他から使用したときにEXCELのバージョンに左右されたくないときとかも
レイトバインディングでやったりするけど、
作業場によってはレイトバインディングを禁止しているところもあるので
そういうときは凄く困ったりする。

445デフォルトの名無しさん (ワッチョイ 8f4a-HQfx)2017/04/01(土) 02:56:26.94ID:FVQlMy4+0
そのアーリーバインディングをコード上で記述しとくってできないの?

446デフォルトの名無しさん (ワッチョイ bf3c-3MUK)2017/04/01(土) 08:11:28.58ID:rQd+4FjZ0
>>445
無理だと思う
C# でもコンパイルオプションで指定するんだし

素人さんでもこの3種類ぐらいは知っておこうな

* IUnknown
COMに必須のインターフェース
参照カウントを管理するためのメソッドが宣言される

* IDispatch
動的実行に必須のインターフェース
メソッドの名前検索や動的実行のためのメソッドなどが宣言される
スクリプティングや遅延バインドで使うクラスはこれを実装する
VBAやVB.NETのObjectやC#のdynamicに代入されたCOMオブジェクトへのメソッド呼び出しは糖衣構文でありIDispatchを使ったメソッドの名前検索と実行にコンパイルされる
コンパイル時に型情報を使用しないため参照設定は必要ない

* ユーザー定義のインターフェース
例えばWorkbookインターフェースなど
型情報としてそのインターフェースに固有のメソッドなどが宣言されている
IDispatchの動的実行とは異なり直接メソッドが実行される
事前バインドするならこれを実装する
コンパイル時に型情報を使用するため参照設定が必要


製品になるようなcoclass(COMのクラス)はほぼ全てIDispatchとユーザー定義のインターフェースを実装しているので事前バインドでも遅延バインドでも動作する
VBAや他の言語が参照設定で参照するのは固有のインターフェース
Object型を使うとユーザー定義のインターフェースを無視してIDispatchとして扱われる

448デフォルトの名無しさん (ワッチョイ cf1f-LJFa)2017/04/01(土) 09:31:55.01ID:nMi+hNGb0
Sub Macro2()

Cells.Select
Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"デザート類!R1C1:R1048576C3", Version:=xlPivotTableVersion14).CreatePivotTable _
TableDestination:="Sheet5!R3C1", TableName:="ピボットテーブル2", DefaultVersion _
:=xlPivotTableVersion14
Sheets("Sheet5").Select
Cells(3, 1).Select
With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("バナナ")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("りんご")
.Orientation = xlRowField
.Position = 2
End With
With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("みかん")
.Orientation = xlRowField
.Position = 3
End With
End Sub

449デフォルトの名無しさん (ワッチョイ cf1f-LJFa)2017/04/01(土) 09:32:27.62ID:nMi+hNGb0
>>448続き)


ピポッドテーブルのコードの書き方が分からなくて、マクロの記録を使ってみたのですが、
どうもコードが汚くなってしまいます。(今後はフィールドの数も増やすのでもっとゴチャゴチャになってしまいます)
また、このコードだと、Sheet5にしかピボットテーブルが作成できなくて、
既にSheet5があったりすると、エラーが起きてしまいます。
ここに仮にSheet5が使えなかったら別のシートにピボットテーブルを作れるようにするにはどうしたらいいですか?
(可変、というのでしょうか)
本当はこの表は「表形式」「小計を表示しない」もしたいです。
(コードがムチャクチャ長くなるので省略しました)

よろしくお願いします

450デフォルトの名無しさん (ワッチョイ cfe2-agmj)2017/04/01(土) 09:49:31.04ID:lUr6QvnA0
TableDestination:=Sheets("Sheet5").Range("A3")

451デフォルトの名無しさん (ワッチョイ cf1f-LJFa)2017/04/01(土) 10:16:38.24ID:nMi+hNGb0
>>450

452デフォルトの名無しさん (ワッチョイ b344-+x88)2017/04/01(土) 12:36:34.15ID:ozwLYWa+0
>>448-449
マクロの記録だと どうしてもゴチャゴチャするから
出来たコードを1行1行何をしてるか調べて整理整頓してけばいいだけっしょ
"調べるの大変"・"めんどくさい"って言ってたらいつまでも上達しないよ

453デフォルトの名無しさん (ワッチョイ bf92-6pw6)2017/04/01(土) 12:58:38.04ID:ZJwLon8g0
>>442
そこがよくわからない。
ワードが入ってなかったら、
参照設定してもしなくても、結局ワードの機能は使えないんじゃないかと思うんだけど。

454デフォルトの名無しさん (ワッチョイ bf3c-3MUK)2017/04/01(土) 13:27:14.73ID:rQd+4FjZ0
>>453
ワードが入っていたら .docx 形式でも出力できるけど入っていなかったら .txt でしか出力できないアプリケーションとか
アーリーバインディングだとワードが入っていないと起動時にエラーになってしまう

>>453
そうだよ

456デフォルトの名無しさん (ワッチョイ 933c-IrRS)2017/04/01(土) 16:01:35.63ID:G9tEFdZv0
>>453
>>454これってことは、レイトバインディングにすればエラー処理できるってことじゃね

457デフォルトの名無しさん (ワッチョイ 231f-LJFa)2017/04/01(土) 18:28:29.29ID:8wy/1/I/0
>>449です。
>>452色々調べてはいるのですが、どうしてもこれを可変で処理する方法が分からないんですよね・・。
ピボットテーブルもWEB上には色々効率的なコードが転がってはいますが、
変数が多すぎてついていけない。

458デフォルトの名無しさん (ワッチョイ cfe2-agmj)2017/04/01(土) 21:59:28.77ID:lUr6QvnA0
>>451
それじゃ、これ
TableDestination:=ActiveSheet.Range("A3")

459デフォルトの名無しさん (ワッチョイ efa6-agmj)2017/04/02(日) 18:19:27.98ID:KXMXncpS0
ピボットテーブルは出来上がったものに対してマクロで操作するしかしたことないけど
PivotCachesをつくってからPivotTableを作るとか
xlPivotTableVersion14とかなんか興味深いな

460デフォルトの名無しさん (ワッチョイ cf1f-LJFa)2017/04/02(日) 19:46:07.86ID:psC2KS+G0
>>458
返事遅くなりました。
おぉすごい、出来ました!ありがとうございます。
自分でも少し勉強します^^

461デフォルトの名無しさん (ワッチョイ cf1f-LJFa)2017/04/02(日) 19:47:18.45ID:psC2KS+G0
>>459
私はピボットとかは全然分からないですね・・(汗)
既存のピボットを弄る事はあってもマクロは全然です。

462デフォルトの名無しさん (ワッチョイ 7fd4-AfcP)2017/04/03(月) 22:28:12.80ID:ws8Oa/qx0
RelaxToolsのマウスカーソルにシェイプがくっつくのすげーな

463デフォルトの名無しさん (ワッチョイ efa6-agmj)2017/04/04(火) 00:52:27.87ID:Ib2dH6db0
どういうこと?

464デフォルトの名無しさん (ワッチョイ b3b2-QmV0)2017/04/04(火) 12:05:24.91ID:C58fgB5p0
俺も初めて見た時、その手があったか!!!と思った覚えがあるよ

465デフォルトの名無しさん (ワッチョイ 73ed-FZog)2017/04/04(火) 14:44:33.99ID:2bh8c/Gg0
アウトラインの小計を行った表に対して、
Sub セル前後の空白を削除()
Dim rg As Range
For Each rg In Range("A1").CurrentRegion
rg.Value = Trim(rg.Value)
Next
End Sub
これを実行すると合計が2倍になってしまうのは、どこか間違っているのでしょうか?

466デフォルトの名無しさん (ワッチョイ b344-+x88)2017/04/04(火) 17:10:34.71ID:HBJeD6ul0
>>465
rg.Value = Trim(rg.Value)
により
途中の SUBTOTAL()関数を 関数→数値に代えてしまってるから

467465 (ワッチョイ b3e9-FZog)2017/04/04(火) 19:39:54.18ID:uM/SdqAx0
>>466
ああっ、そういえば。SUBTOTALが入ったセルを除外する処理を入れないとダメなんですね。
参考になりました。ありがとうございます。

468デフォルトの名無しさん (ワッチョイ 73ed-FZog)2017/04/05(水) 10:36:43.87ID:Xkef/zrk0
>>467
自己レス。いちおう、こんな風で落ち着きました。
Sub セル前後の空白を削除()

Dim rg As Range
For Each rg In Range("A1").CurrentRegion
If rg.HasFormula = 0 Then rg.Value = Trim(rg.Value)
Next
End Sub

469デフォルトの名無しさん (ワッチョイ bfc7-uDDa)2017/04/05(水) 22:59:44.18ID:bozOnK090
for each 個別セル in セル範囲.column(n列目)

どうして 「.column(n列目)」つけると個別に処理できなくなるんですか

教えて偉い人

470デフォルトの名無しさん (ワッチョイ 834c-QmV0)2017/04/05(水) 23:05:46.79ID:I3kTsTUe0
>>469
Columnって数値でしょ。
Columnsの事なら、それ自体がコレクションだから個別セルを扱いたい場合は、
さらにCellsを加えないといけない。

471デフォルトの名無しさん (ワッチョイ bf92-6pw6)2017/04/05(水) 23:08:39.06ID:xUPLXnHU0
Select Replace(列名, 'ああああ', 'いいいい') って書いたら、SQLの構文エラーって怒られたぞ!

何で?
何で?
何で?

472デフォルトの名無しさん (ワッチョイ bfc7-uDDa)2017/04/05(水) 23:18:29.56ID:bozOnK090
>>470
ありがとうございます!

473デフォルトの名無しさん (ワッチョイ 723f-D6lx)2017/04/06(木) 08:50:45.04ID:1P9LZSMX0
>>471
FROM句がない
もしかして:Select Case

474デフォルトの名無しさん (ワッチョイ f272-Cp7l)2017/04/06(木) 22:47:54.34ID:Ktf5vqAp0
別ブックの月ごとのシートのセルを参照させるためにindirect使ったんだけどうまく参照できない…
同じブック内だとうまういくのに
ってか関数だからスレ違いかな?

475デフォルトの名無しさん (ワッチョイ f2a8-02AM)2017/04/06(木) 23:07:08.37ID:Tp8jJnlv0
>>474
Excel総合相談所 126 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/bsoft/1490439044/

476デフォルトの名無しさん (ワッチョイ f292-3qVo)2017/04/06(木) 23:17:59.97ID:f9apYHG50
>>473
Fromは書いたんだけどね。

Select 列名 From 〜 だとOKで、
Select Replace(列名, 'ああああ', 'いいいい') From 〜 は駄目だった。

ググっても、Excelの例が見つからないので、
Accessの例に倣ったんだけど、Microsoftのは構文同じでしょ?

>>476
状況はよく分からんけど
こういうことだとエスパー
http://www.office-kitami.com/lesson/afunction/replace.html

478デフォルトの名無しさん (ワッチョイ f34c-02AM)2017/04/06(木) 23:43:19.22ID:MYxMcZ2k0
>>476
たとえ同じファイルを参照していても、
Accessからアクセスした時のSQLと、Excelからアクセスした時のSQLでは使えるものが違うので、
それぞれ調べなきゃならない。

しかも「エラーが出ずに通るけど無効な関数」とかもあるから、いちいち結果を出力してAccessの結果と比べないと危ない。
ExcelでSQLは鬼門やで・・・。

479デフォルトの名無しさん (ワッチョイ 33d5-02AM)2017/04/06(木) 23:56:10.76ID:xeplHFL10
VBAで任意の文字列の読みの音声を再生したいのです。
Debug.Print "集計完了"、とか、Debug.Print "エラー発生"、じゃなくって、音声を再生したい。
『集計完了』とか『エラー発生』って鳴らしたい。なんか方法ないですかね?

480479 (ワッチョイ 33d5-02AM)2017/04/06(木) 23:59:20.97ID:xeplHFL10
よく使う文字列については、テキストークってフリーソフトでwavファイルを作成してあってそれを再生しているんですが、
wavファイルをいちいち作るのが手間なんです・・・

481デフォルトの名無しさん (ワッチョイ bf44-mAnV)2017/04/07(金) 00:01:33.00ID:0bs4cMEY0
>>479
Application.Speech.Speak "集計完了"

Speech.Speak メソッド (Excel)
https://msdn.microsoft.com/ja-jp/library/office/ff839393.aspx?f=255&MSPPError=-2147217396

482デフォルトの名無しさん (ワッチョイ 33d5-02AM)2017/04/07(金) 00:15:25.28ID:OwFROFWv0
>>481
うわっ、こんなのあるのかー
でも2013以降なのか、2010なんですよ・・・

483デフォルトの名無しさん (ワッチョイ f34c-02AM)2017/04/07(金) 00:24:29.63ID:nbSX3oPN0
俺はやった事無いけど、VOICEROIDなんかはdllを通じて、文字列からリアルタイムに音声を生成したりしてるから、
そっち方面を調べてみればいいんじゃないの。

484デフォルトの名無しさん (ワッチョイ bf44-mAnV)2017/04/07(金) 00:25:31.55ID:0bs4cMEY0
>>482
Excel2002以降のようだが?
https://www.moug.net/tech/exvba/0150100.html

485デフォルトの名無しさん (ワッチョイ 33d5-02AM)2017/04/07(金) 00:40:04.51ID:OwFROFWv0
>>484
そうなんですか?
>>481のリンク先に以下のように書いてあったんで。

Speech.Speak メソッド (Excel)
Office 2013 and later
引数として渡されたテキスト文字列を再生します。
"
>>484のリンク先は明日読ませてもらいます。睡魔が半端ないんで。すいません。

486デフォルトの名無しさん (ワッチョイ 7ea6-D6lx)2017/04/07(金) 02:35:29.53ID:cGej90XV0
Selection.Speak
10年前からこれだけでしゃべるよ

487デフォルトの名無しさん (ワッチョイ f272-Cp7l)2017/04/07(金) 06:15:58.82ID:HnQOnsxg0
>>475
ありがと!

488デフォルトの名無しさん (ワッチョイ c7a6-D6lx)2017/04/07(金) 06:25:37.49ID:Zd3zHmp50
Application.Speech って
CreateObject("SAPI.SpVoice")
(もしくはNew)をしてるだけ?

489デフォルトの名無しさん (ワッチョイ 7235-zcaE)2017/04/07(金) 10:38:33.32ID:bGMK3jqg0
英語はしゃべってくれるけど日本語はしゃべってくれない。
どうしたらいいですか?

490デフォルトの名無しさん (ワッチョイ 361f-02AM)2017/04/07(金) 11:02:03.18ID:dnEqleWu0
>>476
別名指定してみたら?
Select Replace(列名, 'ああああ', 'いいいい') as 別列名 From 〜

491デフォルトの名無しさん (ワッチョイ bf44-mAnV)2017/04/07(金) 11:12:58.13ID:0bs4cMEY0

492デフォルトの名無しさん (ワッチョイ 7235-zcaE)2017/04/07(金) 13:12:39.98ID:bGMK3jqg0
>>491
うちのPCは日本語が選択できんがな

自分でwaveファイルつくって再生すれば

全シート対象にinputboxに打ち込んだ文字列を検索して、一致するセルに図形配置、図形にハイパーリンク設定したいんだけどうまくいかない。。。ご教授願いたい。

495デフォルトの名無しさん (JP 0Hce-UDlz)2017/04/07(金) 15:07:20.55ID:IIlb/TvMH
>>494
1. inputboxで検索文字列を入力する
2. 全シート対象に文字列検索する
3. 一致したセルに図形を配置する
4. その図形にハイパーリンクを設定
のどこがどううまくいかないんだ?

496494 (オイコラミネオ MM0e-UOT4)2017/04/07(金) 15:17:25.00ID:uXbjTNllM
>>495
全シート検索がうまくいかない。。。
アクティブなシートだけにならなんとか流れるだけど。

497デフォルトの名無しさん (JP 0Hce-UDlz)2017/04/07(金) 15:22:01.01ID:IIlb/TvMH
>>496
「全シートを対象」というのがわからないなら、シート毎に処理するようにすればいい。
dim ws as worksheet
for each ws in worksheets
  ' ws.find
next

498494 (オイコラミネオ MM0e-UOT4)2017/04/07(金) 15:29:34.46ID:uXbjTNllM
>>497
ごめん、そのコードすらいまいちよくわかんないゴミクズなんだ。

499デフォルトの名無しさん (JP 0Hce-UDlz)2017/04/07(金) 15:33:20.72ID:IIlb/TvMH
>>498
うーむ、誰かが完全なマクロをレスするのを待て。俺は書かない。

500デフォルトの名無しさん (ワッチョイ b234-RYNW)2017/04/07(金) 15:36:33.36ID:Oq0EZ/9X0
グラフの作成を行いたいと思っているのですが
横軸をSeriesCollectionで12個のセルを参照すると
12個以上の項目が表示されてしまいます
原因がわかれば是非教えていただきたいです…

501デフォルトの名無しさん (ワッチョイ f73c-+7P/)2017/04/08(土) 14:50:44.08ID:btIuJTXZ0
>>498
for eachわからんの?
それともわかる気がないの?

502デフォルトの名無しさん (ワッチョイ 071e-D6lx)2017/04/08(土) 20:13:36.55ID:ax68zM2O0
耳無し

質問なんですが、テキストファイルの置換がしたいです。
特定の文字が含まれた行があるとき、行全てを置換したいのですがどうすれば良いですか?
Replaceだと文字対文字の置換なのでちょっと違うし。解説HPとかヒントでも有れば嬉しいです。
イメージは以下です。

【置換前】
ネコ科 トラ
ネコ科 ヤマネコ

【置換後】
ネコ科 ペット
ネコ科 ペット

504デフォルトの名無しさん (ワキゲー MM4a-1k/n)2017/04/08(土) 20:39:44.97ID:wxtiD9e4M
^(ネコ科¥s).*$

¥1ペット

505デフォルトの名無しさん (ワッチョイ 071e-D6lx)2017/04/08(土) 21:02:06.42ID:ax68zM2O0
>>503
>特定の文字が含まれた行があるとき、行全てを置換したいのですがどうすれば良いですか?
これ文面通り受け取っていいのかな?
instrして条件一致したら一行置き換えればいいだけでは?

506デフォルトの名無しさん (ワッチョイ 071e-D6lx)2017/04/08(土) 21:07:58.46ID:ax68zM2O0
【置換前】
ネコ科 トラ
ネコ科 トラ トラ

【置換後】
ネコ科 ペット
ネコ科 ペット ペット

こういうパターンもあるなら前言撤回

>>504
アドレス有難いのですが自分には理解出来ず申し訳ないです…

>>505
Line Inputで行毎にInstrしてヒットしたら、置換したい行を設定するイメージで合ってますか?
サンプルが「buf = .readall」だったのでその発想は無かったです。
ちょっと試してみます。
>>506のパターンは無いので問題無いです。

508デフォルトの名無しさん (ワッチョイ 071e-D6lx)2017/04/08(土) 21:43:31.36ID:ax68zM2O0
>>507
>Line Inputで行毎にInstrしてヒットしたら、置換したい行を設定するイメージで合ってますか?
うん、そのまんま。
もっといいやり方があるかもしれんが。

509デフォルトの名無しさん (ワキゲー MM4a-1k/n)2017/04/08(土) 21:50:45.26ID:wxtiD9e4M
>>507
アドレスじゃなくて正規表現の置換

510デフォルトの名無しさん (ワッチョイ 0775-fmtp)2017/04/08(土) 22:15:17.56ID:3lVKbMBk0
Excel 2016 VBAの質問です
C#をメインでやってきて少し戸惑っているのですがマクロ開始後最初に呼び出されるのはどのメソッドなのでしょうか?
一番上に書かれたものが呼び出されると解釈してよろしいのでしょうか?

511デフォルトの名無しさん (ワッチョイ fb74-3qVo)2017/04/08(土) 22:21:14.14ID:2xcpydgL0
>>510
エディタを開いた時にカーソルのある場所の手続きが呼び出される
カーソルが手続きの外にある場合はメニューが出て、どれを実行するか聞いてくる

512デフォルトの名無しさん (ワッチョイ c7a6-D6lx)2017/04/08(土) 22:23:04.37ID:IgB5Aui10
>>510
マクロをどうやって開始したのか?

513デフォルトの名無しさん (ワッチョイ bfb2-02AM)2017/04/08(土) 22:55:44.24ID:Cpm5lj5Q0
>>510
成る程・・・Cとかのプログラミングに慣れてると、いわゆるMain()に該当することがなくて戸惑うかも。
VBAはExcelベース上で動いているのでMain()が必要ない。
マクロの発生要因は
・開発者によるVBEでのF5(選択or入力カーソル位置)
・ExcelユーザーによるAlt+F8
など。いきなり好きなメソッドが呼び出せる
あとはワークシート、ブックに対するイベントとかかな

514デフォルトの名無しさん (ワッチョイ f34c-02AM)2017/04/08(土) 23:20:41.62ID:t5AmMYig0
Mainが無いというより開始する関数名がMainに固定されないという方がイメージしやすいかも。
機能毎にマクロを実行するからMainの代わりにそれぞれの開始関数名をどこかで登録する必要がある。

515デフォルトの名無しさん (ワッチョイ c7a6-D6lx)2017/04/08(土) 23:41:17.05ID:IgB5Aui10
プロセスは Excel.exe であって VBA.exe じゃないんだから

516デフォルトの名無しさん (ワッチョイ f2a8-02AM)2017/04/08(土) 23:42:45.49ID:D94oPcWW0
強いて言えば、auto_open()かThisWorkBookのWorkbook_Open()
が真っ先に起動する…んだっけ

Mainは自分で作るんだよ。
いろんなイベントが有るだろ。
特にこれといったイベントが無くても開始するイベントを作ってそれをトリガ−にする。
例えばある人はシート上にボタンを配置する。
またある人はリボン上にメニューを作る。

518デフォルトの名無しさん (ワッチョイ fb74-3qVo)2017/04/09(日) 00:39:13.93ID:0T9WQSVM0
ちょっと性格が違うけど最優先で処理されるのはXLSTARTかな

>>507
readallをそのまま適用したいなら、bufを改行文字列でsplitしてやればいい

520デフォルトの名無しさん (ワッチョイ 0775-fmtp)2017/04/09(日) 21:10:18.84ID:CmOZu5nV0
>>513
なるほどです
VBA勉強中ですが、なかなかVBAが体に染み込んでいかないです
どこに何があるのか、どうやったらアクセスできるのかが直感的にわからないです

521デフォルトの名無しさん (ワッチョイ bf76-DYLG)2017/04/10(月) 06:30:37.72ID:cMM9qeDL0
>>520
自分で作ったものならどうすれば何が走ってどのようなことを行うのかは分かるだろうけど
人が作ったものは分かり辛いかもね。

そこは仕様書や使用方法を書いたマニュアルを読むっていうのはC#もVBAも同じ。

522デフォルトの名無しさん (スップ Sdb2-dvjh)2017/04/10(月) 07:09:47.83ID:EfXFmhz1d
C#から移行してきた事情に興味あり

C#やPowershellに慣れるとExcel VBAの扱いにくさ分かりにくさには嫌気がさすよね
業務都合で周りから押し付けられでもしなければVBAを始めようという気にはなれない
とはいえ数の暴力民主主義の国だから自分だけExcel VBAを完全に切り捨てることは難しい
悩ましいものだ

524デフォルトの名無しさん (ワッチョイ fb74-3qVo)2017/04/10(月) 09:11:59.54ID:IaJx3M830
最初に覚えたのがN-BASICだったのでVBAには何の違和感もなかった

525デフォルトの名無しさん (ワッチョイ 22d4-D6lx)2017/04/10(月) 11:05:12.36ID:MPkrkSeN0
ビル・ゲイツがBASIC大好きだったので 他社開発のVBは買収してMS製品になった

526デフォルトの名無しさん (ワッチョイ 7ec8-L9Vk)2017/04/10(月) 11:12:07.05ID:4S+rUpq80
>>523
C#のように別でコンパイル必要な面倒臭さが無いのが良いんだよ。
その場でhogeることが出来る。
単独で弄れるのが良い。
もっともexe作るという点で見ればC#も単独で弄るわけで変わらん。

別にJavaだろうがCだろうがどんな言語だろうが違和感なく使えると思うけど。

527デフォルトの名無しさん (スップ Sdb2-dvjh)2017/04/10(月) 11:33:09.05ID:EfXFmhz1d
自分ライブラリを充実させればイミディエイトウィンドウをシェルがわりに使えてむしろ便利な環境だぞ。

528デフォルトの名無しさん (ワッチョイ f34c-02AM)2017/04/10(月) 11:44:58.46ID:NXILpash0
ある言語だけを使い続けると、他の言語を学習するときに妨げになるのはよくある事。

>>508
お陰様でなんとかなりました。
ありがとうございます。

>>526
コマンド1発だし最近はビルド速いし大したデメリットじゃないよ
VBEとかいう産廃IDEの劣悪な環境に付き合える超人的忍耐力があるならなんも気にならん

>>530
えー
コンパイル対象がいっぱいあってコンパイル順序が
手順書に記載されていないと調べるのも大変だよ。
DLL内でDLLを参照してたりしてて、
どのインスタンスがインターフェースに設定されて呼ばれてくるのかよく分からないときとか
トレースしてても動きがよく分からないときとかあるし。

532デフォルトの名無しさん (ワッチョイ 0706-fmtp)2017/04/10(月) 20:58:54.70ID:cTcnvSML0
>>522
業務で使うみたいなので勉強中なのです

関数の呼び出しも複数あるのが気に入らないですね
引数の定義もなんであんな呼び方ができるのかわからないですし
とりあえず演習問題やりながら慣れていくしかなさそうです

533デフォルトの名無しさん (ワッチョイ 0706-fmtp)2017/04/10(月) 21:05:22.06ID:cTcnvSML0
またC#をやっていたのでメソッドとプロパティを同じような書き方をするので拒否反応を起こしているんだと思います
ほんと慣れしかないですね

>>531
手順書文化とはまたエクセルマンらしいね
まさかとは思うけど手順書とやらに従って手作業で順番にコンパイルするのかい?
普通はコマンド1発あるいはボタン1発で全てのビルド工程が進むように開発するものだよ
1発で終わるものに手順もクソもないよね

535デフォルトの名無しさん (ワッチョイ f34c-02AM)2017/04/10(月) 21:43:25.91ID:NXILpash0
C#からエクセル弄るって話じゃないか?
VBAでDLLフル活用なんて場面そんなにないだろ。

536デフォルトの名無しさん (ワッチョイ f272-Cp7l)2017/04/10(月) 21:49:01.44ID:qa3tuUv00
選択した範囲のセルとグラフエリアのグラフを画像として特定の名前で保存したい
htmlとして保存して画像を取り出すマクロではうまくいかなかった
他良い方法あるかなあ?

537デフォルトの名無しさん (ワッチョイ bf44-mAnV)2017/04/11(火) 05:46:19.28ID:Y2tt5zWL0
セル範囲.CopyPicture
したものをChartObjectへ貼り付けてExport

538デフォルトの名無しさん (ワッチョイ bfb2-02AM)2017/04/11(火) 15:17:40.87ID:zuhsCqBk0
楽に時間計算しようとおもってDateTime使ってたら、24時間以上の時0に戻ってしまうなどの問題があることがわかった。
24:00以上も扱えるユーザー定義クラスって何処かに流れてないかな?

539デフォルトの名無しさん (ワッチョイ fb74-3qVo)2017/04/11(火) 15:23:28.88ID:o/k96Ri60
>>538
シリアル値の計算は24以下かどうかの区別なんてしてないから、あとは高確率で表示形式だけの問題

540デフォルトの名無しさん (JP 0Hce-UDlz)2017/04/11(火) 15:38:23.80ID:Ei1BFwyDH
>>538
以降、自分が書いたコードを先に書くようにしてくれ。

541デフォルトの名無しさん (ワッチョイ b234-RYNW)2017/04/11(火) 15:41:08.64ID://PtMwgR0
どなたか>>500について教えて下さい

542デフォルトの名無しさん (ワッチョイ bfb2-02AM)2017/04/11(火) 17:25:31.72ID:zuhsCqBk0
>>540
問題は色々あるが、まずキャストの問題
tm = TimeValue("25:00") '型が一致しません。
tm = CDate("25:00") '型が一致しません。

次に加算した後のHour関数の問題
Hour(CDate("10:00") + CDate("20:00")) '30ではなく6と出力される。
これは以下の関数で対処した
Function HourEx(tm As Date) As Long
HourEx = CInt(tm) * 24 + Hour((tm - CInt(tm)))
End Function

分、秒にも対応しなきゃいけないし、こういうのを網羅したTimeクラス的なものが公開されてないかと思った。
仕方ないので今がんばって開発中

543デフォルトの名無しさん (ワッチョイ f34c-02AM)2017/04/11(火) 17:35:25.55ID:U78Liihp0
>>542
NOW()で時間記録してDateDiff()と時間差で判定すりゃいいのでは?

544デフォルトの名無しさん (ワッチョイ f34c-02AM)2017/04/11(火) 17:37:17.00ID:U78Liihp0
>>542
Datediff("h","2016/4/1 1:00:00","2016/4/2 2:00:00")

これで25と出た。

545デフォルトの名無しさん (JP 0Hce-8Vmj)2017/04/11(火) 17:38:32.00ID:Ei1BFwyDH
>>542
"DateTime"とは一体何だったのか。

普通の人は普通に足し算して普通に表示してますな。

> 問題は色々あるが、まずキャストの問題
> tm = TimeValue("25:00") '型が一致しません。
マニュアル見ろ。

> tm = CDate("25:00") '型が一致しません。
マニュアル見ろ。

ここまでで解決方の糸口を見つけることができないのなら、ググれ。
https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=vba+24%E6%99%82%E9%96%93%E4%BB%A5%E4%B8%8A+%E8%A8%88%E7%AE%97

546デフォルトの名無しさん (ワッチョイ bfb2-02AM)2017/04/11(火) 18:08:10.76ID:zuhsCqBk0
>>544
でも例のように入力値は日付シリアルではなく、文字列で"25:00"とかなんです。
ソースが別アプリの出力txtなので・・・

>>545
解決の糸口を聞いているのではなく、「時間操作でよく使う機能をまとめたクラスやモジュールはないか」と聞いている。
キャスト部分だけ自作すればDateAdd、DateDiffが使えるので、例が悪かったかもしれません。

とりあえず完成したので〆ます。
ありが

547デフォルトの名無しさん (JP 0Hce-8Vmj)2017/04/11(火) 18:18:58.64ID:Ei1BFwyDH
まぁ>>539の意味がわかってない段階で、関わるだけ無駄だって気づかなかった俺がバカだったよ。

>>546
入力部分だけ作ればいいだけだろ
自分の用途にぴったりなクラスを夢見てさまよう間にできると思うぞ

549デフォルトの名無しさん (ワッチョイ f272-Cp7l)2017/04/11(火) 21:14:04.97ID:nHmQEt9Z0
>>537
もう少し詳しく教えてほしい!

550デフォルトの名無しさん (ワッチョイ bf44-mAnV)2017/04/11(火) 22:40:41.31ID:Y2tt5zWL0
>>549
詳しくもなにも そのまんま >>265 にもその 回答あるよ

因みにExcelのバージョンによって挙動が違う見たいで
もし 真っ白な画像が出来上がってしまったら
ChartObject を Select してから ペーストしたら良いかも
俺ん所では↓で上手くいった

Set Sel = Selection
Sel.CopyPicture Appearance:=xlScreen, Format:=xlPicture
With ActiveSheet.ChartObjects.Add(0, 0, Sel.Width + 2, Sel.Height + 2)
 .Select
 .Chart.Paste
 .Chart.Export Filename:="D:\TEST.JPG", filtername:="JPG"
 .Delete
End With

551デフォルトの名無しさん (ワッチョイ f272-Cp7l)2017/04/11(火) 22:55:45.99ID:nHmQEt9Z0
>>550
おお、すんません、ありがとう!試してみる!

552デフォルトの名無しさん (オイコラミネオ MM0e-nOqi)2017/04/12(水) 18:17:43.45ID:odpxAiBvM
アクティブセルに合わせてユーザーフォームを表示したいのですが、
セルからスクリーン座標を求めるコードでWindowsデスクトップの拡大率が100%以外でも動くものは無いでしょうか?
よろしくお願いします。

>>552
RelaxToolsの強調シェイプが最近進化してて、シェイプにマウスカーソルを上手く当ててるけど、あれ10%に縮小しても動いてたで。
あれ、参考にすればスクリーン座標からポイントに変換できそう。ウィンドウの分割も出来てたような。

>>552
デスクトップの拡大率か。DPI(96)が変わるのでWindows APIで取得する必要あり。

555デフォルトの名無しさん (ワイモマー MM0a-Avuj)2017/04/12(水) 20:38:31.49ID:U8wFqScOM
>>554
GetDeviceCapsを使えばいいのでしょうか?
マルチディスプレイでスケーリングが異なる場合はどうすればいいでしょうか?

556デフォルトの名無しさん (ワッチョイ 22d4-UDlz)2017/04/12(水) 22:01:01.88ID:8AVsu0eO0
試したことないけど。Excel 2013 以降は ActiveWindow.hWnd があるから
ウィンドウ事にDPIが取れるかもね。

hWnd = ActiveWindow.hWnd
hDc = GetDC(hWnd)
dblSx = GetDeviceCaps(hDc, LOGPIXELSX)
dblSy = GetDeviceCaps(hDc, LOGPIXELSY)
ReleaseDC hWnd, hDc

557デフォルトの名無しさん (ワッチョイ 3675-UDlz)2017/04/12(水) 23:57:46.49ID:jYs9/xfc0
B3 = a, B4 = b, B5 = c, = B6 = d, B7 = e があり(Table1)、
D3 = g, D4 = d, D5 = A, D = b, D7 = E があります(Table2)。
Table2にないTable1の要素を見つけたいのですが、皆さんはどのような式を書きますか?

558デフォルトの名無しさん (ワッチョイ 1f92-EvE2)2017/04/13(木) 00:12:59.30ID:QI+xTA8L0
       __    __
     /      /  /     /
    /_    /  /     /
    ̄ /  / _/     /
 __/  /__/\_  /
         ̄          ̄ ̄ ̄

559デフォルトの名無しさん (アークセー Sx6f-t+s2)2017/04/13(木) 15:49:40.82ID:VXWvrIs2x
vlookupとoffsetを組み合わせたようなものを考えているんだけど
可変する数値をキーに別ブックの検索列(1〜の連番で行が時々飛んでいる)と一致した数値の行の右2つ目△列や□列にセルA、B、Cの数値を転記したい。
可能かな?
ブック1の中のシート1
セルA 120
セルB 20
セルC 300
セルD・・・

別ブックの中のシートa
1 〇△〇〇□
2 〇△〇〇□
3 〇△〇〇□
空白
4 〇△〇〇□
5 〇△〇〇□
空白
空白
6 〇△〇〇□
7・・・

3〇120〇〇20〇〇・・300 のように転記

560デフォルトの名無しさん (JP 0H7f-V7Gz)2017/04/13(木) 16:37:41.09ID:D0Be1kxIH
>>559
おそらく可能だろうけど、疑問点があるならもっと具体的に聞いた方が回答がつきやすいと思うよ。

561デフォルトの名無しさん (ワイモマー MMbf-KnmV)2017/04/13(木) 21:05:32.40ID:UllVOIIxM
>>556
ご回答ありがとうございました。
CellScreenPosというコードが画面分割等対応しているので参考にしようと思います。

562デフォルトの名無しさん (ワッチョイ 1f92-EvE2)2017/04/13(木) 23:27:52.93ID:QI+xTA8L0
>vlookupとoffsetを組み合わせたようなものを考えているんだけど

    / _     ̄ ̄ \\       / ̄|   ̄ ̄|
  /|     /  ̄| ̄     \\ |    |    /
    |  _/   /          /   /   /\

  ____      __/
      /      __|_
   \/  \\ |    |
     \     /   /

>>557
ループさせてありなしでフラグを返してなければ値を取得

564デフォルトの名無しさん (ワイモマー MMbf-KnmV)2017/04/14(金) 18:38:58.51ID:gFBzbqoCM
アクティブシートの1つ前にアクティブだったシートを取得したいんですが、
Worksheet_DeactivateでアクティブシートをStatic変数に入れても現在のアクティブシートが入っちゃいます。
何かいい方法ないですか?

565デフォルトの名無しさん (ワッチョイ 3b74-EvE2)2017/04/14(金) 19:21:21.81ID:NzcUx+me0
>>564
イベントの使い方が間違ってる

変数=ActiveSheet.Name
みたいにやってると思うけど、そうじゃなくて、全部のシートにイベントハンドラを置いて、それぞれに
変数="Sheet1"
みたいに固定値を書く

566デフォルトの名無しさん (ワッチョイ 3b74-EvE2)2017/04/14(金) 19:23:18.23ID:NzcUx+me0
ちょっと訂正
Me.Nameの方が確実で簡単

>>564 Worksheet_activeでやればいいのでは

Collectionかobjectの配列に入れていけばなんとでもなると思う

569デフォルトの名無しさん (ワッチョイ 5b4c-3MbB)2017/04/14(金) 19:47:36.28ID:b07CNRYX0
シートをまたぐならThisworkbook内でやるべきだな。

>>567
切り替わってからどうやるつもりだよ...
ってか要件理解してないのか?

クラスモジュール使ってイベント受け取ってゴニョゴニョするのはワークシートだと厳しいのか?

572デフォルトの名無しさん (ワイモマー MMbf-KnmV)2017/04/14(金) 21:26:56.49ID:gFBzbqoCM
ご回答ありがとうございます
目的としてはシートを切り替える際に設定を戻したいのですが直前のシートが必要でした

573デフォルトの名無しさん (ワイモマー MMbf-KnmV)2017/04/14(金) 21:36:57.26ID:gFBzbqoCM
頂いたアドバイスの通りやってみたところ、
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Static strSh
strSh = Sh.Name
End Sub
でいけました

574デフォルトの名無しさん (ワッチョイ 0fe2-HE/W)2017/04/15(土) 08:58:38.69ID:pEx5hg7i0
>>570
>>573がActivateなら
strSh1 = strSh
strSh = Sh.Name

575559 (ワッチョイ 1f72-aU0q)2017/04/15(土) 23:50:29.59ID:Q2tbp29Z0
>>560
どう書けばいいんだろ
具体的には決まったセルにある数字を別ブックの今日の日付の列の横に転記したいんだけど…

576デフォルトの名無しさん (ワッチョイ 9bc7-1U3j)2017/04/16(日) 00:10:06.44ID:R21ssQqY0
あぁ分かるわ、決まったセルにある数字を別ブックの今日の日付の列の横に転記するプログラムだよな
最初は皆必ずハマるよなそれ

577デフォルトの名無しさん (ワッチョイ 5b4c-3MbB)2017/04/16(日) 00:23:23.67ID:9+Oy7LWo0
>>575
ソースデータと、それを手動で編集した完成図を提示してもらえば一番早い。

578デフォルトの名無しさん (ワッチョイ 9bc7-i7kD)2017/04/16(日) 00:28:28.17ID:R21ssQqY0
>>577
それと大体のロジックと具体的に実装したコードがあれば完璧だよな

579デフォルトの名無しさん (ワッチョイ 1f92-EvE2)2017/04/16(日) 08:21:54.90ID:zQjS8J610

580デフォルトの名無しさん (ワッチョイ efc8-I0H5)2017/04/16(日) 18:26:18.74ID:H1+egp250
>>575
説明が下手だなあ。
今日の日付ってのが制御に何か関係有るのか?
無いならそんな文言は必要無い。

元の質問でも"右2つ目"とか質問の趣旨に関係有るのか?
"右1つ目"の回答してもどうにもならんのか?
分からないところを絞るべきだろ。

まず、検索する機能は作れるの?
作れるなら検索して得られたセルの行番号がわかるし、入力したい列番号は固定のようだから入力したいセルが分かるだろ。

581559 (ワッチョイ 1f72-aU0q)2017/04/17(月) 19:29:34.10ID:hVkM1VeS0
発想を逆転させたら自己解決した
皆さんありがとでした!

582デフォルトの名無しさん (ワッチョイ 0b28-HE/W)2017/04/17(月) 21:58:01.02ID:uRmQRumj0
For j = 0 To 6
Worksheets("" & j & "").Range(Cells(N, 1), Cells(N, 95)).ClearContents
Next j

アプリケーション定義またはオブジェクト定義のエラーです。

シートをアクティブにしなくてもできるはずなんだけどエラーになってしまいます。
変数にはちゃんと値が入っています。何がいけないんでしょう。

583デフォルトの名無しさん (ワッチョイ 2b44-dtzd)2017/04/17(月) 22:12:10.20ID:cXWFYTeK0
>>
>Worksheets("" & j & "").Range(Cells(N, 1), Cells(N, 95)).ClearContent
これがいけない

Worksheets("" & j & "").Range( ) は 指定したシートなんだけど
Cells(N, 1)と Cells(N, 95)は アクティブシートだから

584デフォルトの名無しさん (ワッチョイ 1f92-EvE2)2017/04/17(月) 22:20:18.77ID:9+Ob3MV70
シート名を変数にする場合、「"」いらなくね?

585デフォルトの名無しさん (ワッチョイ 2b44-dtzd)2017/04/17(月) 22:28:11.13ID:cXWFYTeK0
普通はそうだけど シート名が数値の場合そのままだと シート名ではなく インデックス値と解釈されるから
J=0 の時 エラー(インデックスが有効範囲にありません)になる

586デフォルトの名無しさん (ワッチョイ 1f3c-3MbB)2017/04/17(月) 22:41:30.61ID:4G6Bl6ev0
Worksheets(hoge).Cells(N, 1).Resize(1, 95).ClearContent
の方がスッキリするかな。

587デフォルトの名無しさん (ワッチョイ 0b28-HE/W)2017/04/17(月) 22:44:04.84ID:uRmQRumj0
>>583
ありがとうございます。
RowsかWithを使ってみます。

588デフォルトの名無しさん (オイコラミネオ MM7f-+aVR)2017/04/18(火) 17:36:12.02ID:73dv2MT1M
With Worksheets("hoge")
.Range(.Cells(14,1),.Cells(14,1)).Clear
End With
じゃ駄目?

589デフォルトの名無しさん (オイコラミネオ MM7f-+aVR)2017/04/18(火) 17:41:15.02ID:73dv2MT1M
ところでWithステートメントってIfの内側でもコンパイル時に評価されるの?
With Worksheets(var)でインデックスが見つからないって怒られた
varが空ならその行まで到達しないのに
仕方がないからWithを使わずに書いたらエラーなし
何で?

>>588
OKっぽいけど同じセルだったらRangeなんて使わずに最初からCellsで良いんじゃね?

>>589
varの中身は何だったの?
空ならWith無しでも駄目じゃね?

591デフォルトの名無しさん (ワッチョイ 5b4c-3MbB)2017/04/18(火) 18:37:14.33ID:7A78+rnu0
varのデータ型が何か? 空かどうかをどうやって判定しているか?
その辺りに原因がありそうだなぁ。

特にVariant型で判定かませる時はパターン覚えておかないと想定した動作にならないんだよね。

592デフォルトの名無しさん (ワッチョイ 0fae-HE/W)2017/04/18(火) 18:54:43.06ID:qBnERa1Y0
>>589
問題ない
sh = ""
If False Then
With Worksheets(sh)
.Select
End With
End If

>>585
なら CStr( ) 使え
そもそも後ろの & "" は要らんし

>>589
コードさらして
どう見てもお前さんの勘違いにしか見えない

595デフォルトの名無しさん (ワッチョイ 9fed-vAHc)2017/04/19(水) 11:40:03.76ID:cqBiN5Ye0
VBAの質問になるのかわからないですけど…
cellsとかでアドレス指定するときに
列を英文字から番号に簡単に変更する方法って何かありますか?

Excelのシート自体はR1C1をデフォにはしたくありません
何かのキーを押してる間だけR1C1表示にできれば便利そうだけど
あとはどこかに早見表でも作っておいておけばいいのか
なにか良い知恵があれば教えてください

596デフォルトの名無しさん (ワッチョイ 1f35-jM4a)2017/04/19(水) 11:46:59.87ID:KzHho16m0
>>595
Fundtion GetColumnNumberFromAlphabet (Txt as String) as integer
という関数を作る。

関数の中身は
・RegularExpressionを使いTxtがアルファベットのみで有効な範囲であることを保障。
・For i=1 to Len(Txt)で回して計算する。

597デフォルトの名無しさん (ワッチョイ 2b44-dtzd)2017/04/19(水) 12:05:53.06ID:xGoswchF0
>>595
難しく考えんでも これでいいんじゃないの?

MOJI = "CQ"
NUM = Range(MOJI & 1).Column

あとこうゆう方法もアリだとおもう(つか俺は良く使う)
Cells(1,"CQ")

598デフォルトの名無しさん (アメ MM2f-oBn4)2017/04/19(水) 12:07:08.40ID:RcDwGPTOM
>>595
イミディエイトウィンドウで、
? range("AA1").column

一番上の行を空けといて、そこに数値(列番号)を入れておくとか

200か300くらいまでなら、一覧表を印刷して机に挟んでおく

599デフォルトの名無しさん (アメ MM2f-oBn4)2017/04/19(水) 12:13:16.96ID:RcDwGPTOM
あと、ググったら
ボタン一つでA1形式とR1C1形式を切り替える方法
というのが出てくるよ。

たしか表示形式をVBAで変えられたような気がするわ
単純にアルファベットだからテーブルつくっといて検索とかでも良さそうだが

601デフォルトの名無しさん (ワッチョイ 9fed-vAHc)2017/04/19(水) 13:54:36.52ID:cqBiN5Ye0
>>596-600
みなさんありがとうございました
アドレスは変数として使用したいことが多いので
任意のセルアドレスを簡単に数字に戻せたら…と考えていました
>>599の方法を検索して組み込んだら一番理想に近い状況を構築できました
本当にありがとうございました

602デフォルトの名無しさん (ワキゲー MMbf-Oj0b)2017/04/19(水) 14:54:59.16ID:Rk+PkBJvM
r1c1形式をデフォルトにしてやってるととても使いやすい

603デフォルトの名無しさん (ワッチョイ facd-+atG)2017/04/20(木) 23:21:42.24ID:rsUIJG5Q0
https://oshiete.goo.ne.jp/qa/4292844.html
ここのNo3の回答の人のサンプルを元に

郵便番号から都道府県を引っ張ってくるの作ったんですがすごい遅いです

A.csvは6行しかなくて中身は郵便番号が書いてあります
B.csvは日本郵便のHPからダウンロードした全国版CSVです

下のような感じでA.csvにB.csvの都道府県名をJOINでくっつけようとしたんですが遅くて・・・
速くする方法ありますか?
SELECT [A#csv].[郵便番号], [B#csv].[都道府県]
FROM [A#csv] LEFT JOIN [B#csv] ON [A#csv].[郵便番号] = [B#csv].[郵便番号]

604デフォルトの名無しさん (ワッチョイ 0a92-VYzI)2017/04/20(木) 23:31:38.75ID:R/f5yW5i0
SQLの使用例をググると、
ADOとかいう、参照設定するやり方ばっか出てくるのは何故?
MicrosoftQuery(外部データの取り込み)のSQLじゃダメなの?

605デフォルトの名無しさん (アークセー Sx23-lqRy)2017/04/21(金) 08:33:51.52ID:LWRI+6r2x
>>603
可能なところは数値と単位を
使って表現してね。
ディクショナリにする

606デフォルトの名無しさん (ワッチョイ bb8c-Z3RH)2017/04/21(金) 18:53:05.44ID:OuvQ8kFd0
ExcelのVBAで、2chの過去ログのスレを覗きに行くコードを書いていますが、
IEで表示した場合、スレの下部に表示されている read.cgi のバージョンが拾えないものがあります

IEでの表示
 ★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50
 read.cgi ver 05.02.02 2014/06/23 Mango Mangue ★
 FOX ★ DSO(Dynamic Shared Object)

例えば、
 大乱闘スマッシュブラザーズforWiiU Part927
 http://mastiff.2ch.net/test/read.cgi/famicom/1420038262/
このスレの場合、
 For i = htmlDoc.body.all.Length - 1 To 0 Step -1
  tmpStr = htmlDoc.body.all(i).innerText
 Next i
これでループを回しても、
「Mango Mangue ★」は取得できますが、「read.cgi ver 05.02.02 2014/06/23」と取れず、
nul(?)が2回出た後に、「最新50」の取得になります。

どうすれば、read.cgi のバージョンを拾えるようになるのでしょうか、お手数ですが教えてください。

607デフォルトの名無しさん (ワッチョイ 2fc7-CZOi)2017/04/21(金) 19:08:02.39ID:v65xqcGu0
>>606
ペチパーにでも聞いてみたら?

608デフォルトの名無しさん (ワッチョイ bb8c-Z3RH)2017/04/21(金) 19:15:02.29ID:OuvQ8kFd0
>>607
いろいろググってたら、
 htmlDoc.all(0).innerText
とりあえず、これで全テキストが取得できるのでここから抽出することにします
ありがとうございました。

609デフォルトの名無しさん (ワッチョイ 0a92-VYzI)2017/04/22(土) 00:06:36.02ID:BgioDdY10
うわぁぁぁぁぁあ、
Rows(a).DeleteがあるからDelete Fromなんか要らねーと思ってたが、
やっぱ要るじゃん。
うわぁぁぁぁぁあ

610603 (ワッチョイ facd-+atG)2017/04/22(土) 01:54:48.82ID:UjWxDTr10
>>605
レスありがとうございます
>可能なところは数値と単位を使って表現してね。
>ディクショナリにする
どういう事でしょうか?
言ってる事が難しくて分かりません

>>603
CSVじゃインデックスは効かないだろうな
Bの件数次第でやり方は変わるだろうけど
先にBを読み取って辞書(郵便番号->都道府県)を作ればいいよ

612デフォルトの名無しさん (ワッチョイ bfd5-5GSV)2017/04/22(土) 17:58:27.62ID:vuuJCZpJ0
複数のシェイプを選択するときには以下のコードで選択できますが、
ActiveSheet.Shapes.Range(Array(1, 2, 3, 4, 5)).select
複数のチャートを選択したいのですが、同じようにできないかと下のように書いたのですが、
”指定した名前のアイテムが見つかりませんでした”と表示されてしまいます。
ThisWorkbook.Worksheets("Chart").ChartObjects(Array(1, 2, 3, 4, 5)).select

複数チャートを選択するにはどうしたらいいですか?

613612 (ワッチョイ bfd5-5GSV)2017/04/22(土) 18:06:41.51ID:vuuJCZpJ0
>>612です。書き忘れましたが、インデックスが1〜5のチャートオブジェクトは存在しています。
ThisWorkbook.Worksheets("Chart").ChartObjects(1).select、←これらはエラー出ません。一つのチャートの選択は無事行えることは確認しています。

614デフォルトの名無しさん (ワッチョイ bb44-X1R2)2017/04/22(土) 18:10:40.36ID:1l1ZtU0Z0
>>612
マクロの記録

ActiveSheet.Shapes.Range(Array(1, 2, 3, 4, 5)).select

615デフォルトの名無しさん (ワッチョイ bfd5-5GSV)2017/04/22(土) 18:27:02.22ID:vuuJCZpJ0
>>614
マクロの記録も試してみたんですが、下のようなわけわからないものが・・・
ActiveSheet.Shapes.Range(Array("Chart 1", "Chart 1", "Chart 1", "Chart 1", "Chart 1")).Select

選択しているチャートのShapesインデックス番号がわかれば、
ActiveSheet.Shapes.Range(Array(1, 2, 3, 4, 5)).select、でできるのですが、インデックスがわからない・・・

Shapesインデックスを知る方法でもいいので教えてもらえないでしょうか?

616603 (ワッチョイ facd-+atG)2017/04/22(土) 21:35:17.51ID:UjWxDTr10
>>611
レスありがとうございます
その辞書というのは何ですか?

すみませんが>>605さんと>>611さんの説明だと全く分からないので
具体的に説明してくれるかたいたら教えてくださいよろしくお願いします

617デフォルトの名無しさん (ワッチョイ 1ee2-HDOw)2017/04/22(土) 21:55:13.73ID:4NYuNeeF0

618603 (ワッチョイ abcd-+atG)2017/04/22(土) 22:33:54.17ID:ZFb0wm2a0
>>617
レスありがとうございます
こんなオブジェクトがあったんですね

B.csvをDictionary オブジェクトに読み込んで
A.csvの郵便番号を指定して検索すると速いと

>>603のADO使ってSQLでやった場合は
CSVに対してだとどう頑張っても遅いんでしょうか?

619デフォルトの名無しさん (アークセー Sx23-lqRy)2017/04/22(土) 23:01:04.58ID:bNnTrzKXx
>>618
RBDMSを使いなさい。

620デフォルトの名無しさん (ワッチョイ 8a3c-5GSV)2017/04/22(土) 23:01:53.62ID:rlW8b9uo0
>>615
試せてないけど、これでどうだろ?
ChartObjects.ShapeRange(Array(1, 2, 3, 4, 5)).select
https://msdn.microsoft.com/ja-jp/library/office/ff197736.aspx

ShapesのグラフだけのIndexを知りたかったら Shape.Type = msoChart で判定するとか、
いっそChartObjectsだけ for each で回すとか、色々選択肢はあるよ。

621603 (ワッチョイ abcd-+atG)2017/04/22(土) 23:55:16.22ID:ZFb0wm2a0
>>619
>>603のようなサンプルコードを教えてください

622デフォルトの名無しさん (ワッチョイ 0a92-VYzI)2017/04/23(日) 02:43:04.92ID:83u8f4Ah0
最近VBAを使うことに限界を感じる・・。
VBAそのものがダメとかじゃなくて、
マイナーな処理についてググると、
C#の作例が9割、VBAの作例が1割とかだったりするの。

623デフォルトの名無しさん (ワッチョイ 06a6-HDOw)2017/04/23(日) 09:29:04.14ID:ZIkh32+O0
>>622
それはExcel関連の処理でもそうなの?

>>622
言っちゃなんだけどそれはVBAそのものがダメなんだよ
エクセル組み込みっていう些細なメリットがある以外はまともな言語じゃない
あまりにも使いにくいからプログラマはみんなExcel VBAを嫌っている
プログラマに嫌われてるってことは情報も発信されないってことだ

625デフォルトの名無しさん (ワッチョイ bfd5-5GSV)2017/04/23(日) 09:47:44.53ID:x3Gx0Ljx0
>>620
試してみました。
ThisWorkbook.Worksheets("Chart").ChartObjects.ShapeRange(1).select、これは問題なかったですが、
ThisWorkbook.Worksheets("Chart").ChartObjects.ShapeRange(Array(1, 2, 3, 4, 5)).select、”指定した名前のアイテムが見つかりませんでした”となります。

>ShapesのグラフだけのIndexを知りたかったら Shape.Type = msoChart で判定するとか
これを試した結果、Shapesのインデックスがわかりました。
で結局、今はこれでうまくいきました
ThisWorkbook.Worksheets("Chart")..Shapes.Range(Array(a, b, c, d, e)).Select

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

626デフォルトの名無しさん (ワッチョイ 0a92-VYzI)2017/04/23(日) 09:47:53.63ID:83u8f4Ah0
>>623
流石に、Excelの機能にしかないものはExcelの例が引っかかるけど、
SQL・IE操作・WindowsAPIは、他の例が多い。

627デフォルトの名無しさん (ワッチョイ 7f4c-5GSV)2017/04/23(日) 10:19:43.25ID:vXH/0lpX0
>>626
VBA以外の例が出る時点で本来は管轄外だからなぁ。

VBAって何気にオールラウンダーだから、ついVBAありきで考えてしまうけど、
普通はそれぞれの目的に合わせて専用の言語でコーディングすべきなんだよな。

オールラウンダー()
専用の言語()

629デフォルトの名無しさん (ワッチョイ 06a6-HDOw)2017/04/23(日) 11:02:26.50ID:ZIkh32+O0
Excel+VBA はGUI実行環境としてはまあまあだと思うけどね
(他言語はそこから呼び出すとして)

630デフォルトの名無しさん (アークセー Sx23-lqRy)2017/04/23(日) 11:14:46.50ID:awXVSw+lx
>>627
専用の例を挙げてみてほしい

631デフォルトの名無しさん (ワッチョイ 7f4c-5GSV)2017/04/23(日) 11:42:46.85ID:vXH/0lpX0
VBAは低レイヤーを意識したプログラミングもできるしWindowsAPIも使えるから、時間を浪費するのさえ気にしなければ何でも出来るぞ。
GUIありきのアプリケーション付属言語という括りで考えると、他にここまでの自由度がある言語ってないんじゃないかな。

>>630
Webサービスのサーバー側で使うPHPと、クライアント側で使うJavaScriptみたいなもんかな。
目的さえ果たせれば何を専用にしてもいいとは思うから一例としてね。

オールラウンダーっていうのは組み込みからウェブ開発までなんでも出来るC++やC#やJavaみたいな言語のことを言うんだよ
VBAなんてエクセルとの相互作用以外になんの使い道もない
もちろん手順を踏めば出来るっちゃ出来るがそれはハサミで魚を捌けると言ってるようなものだ
VBAは何をやらせてもそんな感じになる
オールラウンダーとは程遠いとんだ出来損ないだよ

633デフォルトの名無しさん (スプッッ Sd4a-Vs57)2017/04/23(日) 12:10:52.99ID:M0X6lxBnd
オールラウンダーどころかオランウータンにも劣るかもしれないが、簡便な実行環境ではある。

簡便でもないだろ
クッソ重いエクセル開いてマウスぽちぽちとかめんどくさすぎ

635デフォルトの名無しさん (ワッチョイ 06a6-HDOw)2017/04/23(日) 12:29:40.88ID:ZIkh32+O0
エクセルなんて一瞬で開くし、作業中何らかのブックを開いてることが多いだろ。
それにマウスポテチって?

>>635
一瞬で開かないし作業中はエディタとコンソール以外は無意味に開かねえよ
ポテチはコンソメがベスト

637デフォルトの名無しさん (アークセー Sx23-IcG6)2017/04/23(日) 13:08:47.62ID:kCZ1cMRBx
>>632
ユーザー企業側の内製担当者としては、クライアントPCのOfficeに実行環境が漏れなくついてくるVBAとその他の言語では実行環境構築のための事務的コストが段違いに違うと言える

638デフォルトの名無しさん (アークセー Sx23-IcG6)2017/04/23(日) 13:11:26.60ID:kCZ1cMRBx
>>622
マイナーな処理なんてそもそもExcelとかVBAとかでやることじゃないんだよね本来は

639デフォルトの名無しさん (スプッッ Sd4a-Vs57)2017/04/23(日) 13:43:53.56ID:M0X6lxBnd
内製担当ってなにするの?

640デフォルトの名無しさん (ワッチョイ 1be6-C4NQ)2017/04/23(日) 15:22:34.75ID:QY26x7Mb0
>>639
経理システムとかあるでしょ
ああいう自社業務に使うシステムを、外注ではなく社員が自力で開発・メンテすることを内製と言う
テレビ局が番組の司会にタレントではなく女子アナを使ってお金を節約するのに似てる

641デフォルトの名無しさん (ワッチョイ 06c8-yrA8)2017/04/23(日) 16:50:01.81ID:fs201BJ10
別に言語が違うだけで、能力のある奴はVBAだろうが他の言語だろうが変わらないと思ってるだろ。

明確にExcelで出来ないことってのはあまり無い。
出来ることを知らない奴は多数いるようだが。

そもそもExcel使わないのは本末転倒だがね。

642デフォルトの名無しさん (ワッチョイ 8a3c-AsB1)2017/04/23(日) 17:18:19.43ID:OLTDB5Ux0
>>641
> 別に言語が違うだけで、能力のある奴はVBAだろうが他の言語だろうが変わらないと思ってるだろ。
面倒だなー
って感じ

643デフォルトの名無しさん (スプッッ Sd4a-Vs57)2017/04/23(日) 17:29:11.81ID:M0X6lxBnd
>>640
内製「担当」ってからには普通のEUC 以上の役割が当てられてるんじゃないの。

>>641
能力が同じでも言語が変われば出来ることも変わるよ
C#で大規模Webサイト構築できるやつでもVBAで同じことはできないし
C++で3Dゲーム作れるやつでもVBAで同じことはできない
製品化するようなソフトウェアはVBAじゃできないようなことばかり
VBAで出来ることなんてたかが知れてる

645デフォルトの名無しさん (スプッッ Sd4a-Vs57)2017/04/23(日) 17:51:06.56ID:M0X6lxBnd
そりゃまあ当然だが使い途が違う。
VBAは基本自分一人のためのツールだ。

646デフォルトの名無しさん (ワッチョイ 8a35-HDOw)2017/04/23(日) 18:04:28.70ID:LcCDuITe0
つまりオナニー用ということですか。

>>637
クライアント環境差異を気にするならエクセルはないな
エクセルバージョンやプロセッサアーキテクチャやユーザーカスタマイズの影響が出やすい
マルチプラットフォーム対応がしやすい言語で開発してスタンドアロンパッケージにして配布するのが経験上最もトラブルが少ない

648デフォルトの名無しさん (スプッッ Sd4a-Vs57)2017/04/23(日) 18:06:31.08ID:M0X6lxBnd
電卓をオナニー用と呼ぶのなら

649デフォルトの名無しさん (ワッチョイ 06c8-yrA8)2017/04/23(日) 18:10:42.11ID:fs201BJ10
>>644
出来ないか?
どっちもやろうと思ったこと無いし適用範囲外だから分からんけど。
3Dは出来そうに思うけどな。
大規模Webサイト構築って何を基に言ってる?

というかそれってほとんど言語じゃなくてライブラリの話じゃね?

>>649
>できないか?
できない
膨大化するコードベースを管理しきれないしエクセルがランタイムじゃサービスや製品としての品質を確保できない
使い物にならないオモチャみたいなサンプルを作ってVBAでもできましたと言っていいなら難しくないが

>ライブラリの話
開発環境、フレームワーク、ライブラリ、コミュニティ、書籍などの充実度
これらは言語から切っても切り離せない問題だよね
VBAなんてそれこそCOMライブラリの集合体のようなものだろう
言語とライブラリを切り離して考えたらVBAなんて本当にクソの役にも立たない産廃になってしまう

651デフォルトの名無しさん (ワッチョイ 6b92-MAHZ)2017/04/23(日) 18:51:11.27ID:pWCRP3kj0
Excelしかできない奴がVBAで何でもできると思っている

652デフォルトの名無しさん (ワッチョイ 036e-0iG2)2017/04/23(日) 18:56:08.90ID:iYZj0cYc0
実際何でも出来てしまうからな
9割以上が外との通信で最後チョロっと出力するのにexcelってのは微妙な気分だけど

653デフォルトの名無しさん (ワッチョイ 6b92-MAHZ)2017/04/23(日) 18:58:56.72ID:pWCRP3kj0
できるならやればいい、こんなところにいちいち書かない

654デフォルトの名無しさん (ワッチョイ 7f4c-5GSV)2017/04/23(日) 19:18:02.91ID:vXH/0lpX0
VBAアンチの連中って、どっか別のスレで洗脳でもされてくるんだろうか。

655デフォルトの名無しさん (ブーイモ MMef-X2WX)2017/04/23(日) 19:22:04.48ID:P/UZ8YpLM
自分もアンチだけどどうなんだろう
COM/ActiveXが嫌いだからなのかな

656デフォルトの名無しさん (ワッチョイ 06a6-HDOw)2017/04/23(日) 19:23:45.36ID:ZIkh32+O0
VBAそのものはかなりダメな言語さ
しかし自由度は高いのでほげふがしやすい

657デフォルトの名無しさん (ワッチョイ 8a3c-AsB1)2017/04/23(日) 19:25:04.19ID:OLTDB5Ux0
>>650 には
> できない
ってオチかよ w

>>657
できるならやってみなよ
まあお前じゃ無理だけどな

659デフォルトの名無しさん (ワッチョイ 8a3c-AsB1)2017/04/23(日) 21:45:19.06ID:OLTDB5Ux0
>>658
必要ならやるだけ
発注くれる? w

660603 (ワッチョイ abcd-+atG)2017/04/23(日) 23:12:28.14ID:/2AcrhSu0
能書きは言いので>>603分かる人いたら教えてください

>>660
答えは出てる
後は自分んで考えるべきだ

662デフォルトの名無しさん (ワキゲー MM42-LF4z)2017/04/23(日) 23:19:50.21ID:fe+cTrdNM
>>660
態度が気にくわないので答えない

663603 (ワッチョイ abcd-+atG)2017/04/23(日) 23:27:24.26ID:/2AcrhSu0
>>661-662
質問スレでそういう発言しちゃう人痛すぎ

答えたくない人は黙って答えないでいる
つまり、御託ぬかしているだけの奴は答えられる知識がないだけのただの知ったか

Microsoft MVPとっているような奴でさえいい歳して自分の非を認めない
そんなのが多い現状

664デフォルトの名無しさん (ワッチョイ a31e-HDOw)2017/04/23(日) 23:31:20.91ID:3SQcvV0B0

665603 (ワッチョイ abcd-+atG)2017/04/23(日) 23:35:09.77ID:/2AcrhSu0
>>664
○態度が気にくわないので答えない
◎態度が気に入っても答えられない

と、ふざけるのはこの辺にして、

>>603>>617>>619辺りのサンプルコード分かる人いたら教えてください
よろしくお願いします

666デフォルトの名無しさん (ワッチョイ 06a6-HDOw)2017/04/23(日) 23:45:07.70ID:ZIkh32+O0
>>665
サンプルコードっていうかまずそのCSVをDBのテーブルに入れろって意味だと思う。
そこはVBAと関係ない。

667603 (ワッチョイ abcd-+atG)2017/04/23(日) 23:47:05.56ID:/2AcrhSu0
>>666
ここはVBA質問スレなのでVBAと関係ない回答されても困ります

最近は自分で考えないというかそういうトレーニングしてないから考えることができない若者が増えたよね
ゆとり教育ってやっぱり失敗だったんだなあ

669603 (ワッチョイ abcd-+atG)2017/04/23(日) 23:54:38.69ID:/2AcrhSu0
>>668
回答する人によってどこまで質問者が考えたらよしとするかの基準が違うからね

例えば、よくある意味のないヘルプ
分かってる人にとっては当然のごとく不要
分からない人にとっても(難しくて理解できないので)不要
結局誰のためのヘルプなのか・・・と

質問スレで回答者に分からない内容でレスして
それくらい調べろという回答者基準で質問者に要求することの

670デフォルトの名無しさん (ワッチョイ bb44-X1R2)2017/04/23(日) 23:58:37.69ID:7UO6tpmM0
>>667
ここは "Excel VBA 質問スレ"なのだけど
>>603の質問のどこが"Excel"と関係あるの?

671デフォルトの名無しさん (ワッチョイ 0e4a-C4NQ)2017/04/23(日) 23:59:12.22ID:mOY43HnC0
CSV自体は扱い易く速い部類のデータ構造だけど
CSVを読み込んだだけでは何の順序もない形だから毎回線形探索になって検索とかには全く向いてないO(n)
DBに突っ込むとなんらかの形で順序化されて検索も速いO(log n)
データ量が少なければオンメモリで連想配列にするともっと速いO(1)
実際はJoin辺りの文字列連結自体がネックなんだろうけどね・・・

672603 (ワッチョイ abcd-+atG)2017/04/24(月) 00:03:08.68ID:AsqD071F0
>>670
関係ないことはなくなくない?
>>671
これB.csvが例えばAccessのMDB形式でインデックス?がついてたりすると速いですか?

673デフォルトの名無しさん (ワッチョイ 06a6-HDOw)2017/04/24(月) 00:30:34.27ID:iyRoq4Vj0
速くしたいんだったらCSVのままじゃダメだ。
それが事実。

そこから先Excel VBAの範囲を多少超えた回答がついたとしても何だというんだ。
しょうがないだろ。

674デフォルトの名無しさん (ワッチョイ 0e4a-C4NQ)2017/04/24(月) 00:34:30.34ID:NMLi1oe60
別にExcel入ってなくても作れるなあ
アウトプット次第だが

675デフォルトの名無しさん (ワッチョイ 067a-WTjT)2017/04/24(月) 01:31:09.35ID:VzMv01/A0
なんでわざわざSQLでやるの?
ふつうにEXCELでCSV開いて、ワークシート関数かなんかセットしてやればいんじゃねえの
それで遅いならCSVからちゃんとしたDBに変えろって話だな

676デフォルトの名無しさん (ワッチョイ 067a-WTjT)2017/04/24(月) 01:36:03.32ID:VzMv01/A0
>>671
DBに突っ込んだからっていって、適切なインデックス(キー)設定しないと順序付けなんてされないぞ
そしてインデックスがあったからと言って、かならずO(log n) なわけじゃないぞ

677デフォルトの名無しさん (オッペケ Sr23-QG7Y)2017/04/24(月) 12:24:56.89ID:uGKvtEJWr
>>668
馬鹿は考える真似事をするな黙って言う事を聞いておけば良い
お前のことだぞ

678デフォルトの名無しさん (ワッチョイ 1e75-QHks)2017/04/24(月) 16:10:21.68ID:vrbpIbBt0
データ量が多いなど、本格的な運用なら、
DBの実行計画とか、インデックスで検索する方法とか、本格的な勉強が必要

高度情報処理技術者試験にも、DBスペシャリストがあるほど

679デフォルトの名無しさん (スッップ Sdaa-Vs57)2017/04/24(月) 16:11:42.89ID:fo3LO78rd
多数のクソシートとウンコードの山

680デフォルトの名無しさん (JP 0H56-MAHZ)2017/04/24(月) 16:45:26.24ID:yA6lKxwPH
>>603
全国版CSVをダウンロードしてみたら、約14万行あった。
郵便番号列は昇順にソート済みだった。

まず、郵便番号から都道府県を検索するのなら、
> SELECT [A#csv].[郵便番号], [B#csv].[都道府県]
> FROM [A#csv] LEFT JOIN [B#csv] ON [A#csv].[郵便番号] = [B#csv].[郵便番号]
は全く意味が無い。

SELECT [全国版csv].[都道府県] FROM [全国版csv] WHERE [全国版csv].[郵便番号] = '1234567'
みたいなクエリで十分。

また、CSVをそのまま読み込んでRange.Findしてもそれほど時間はかからない。
それが遅いなら、郵便番号列を二分探索するコードを書けばいい。(最悪でも18回の比較で済む)

681デフォルトの名無しさん (JP 0H56-MAHZ)2017/04/24(月) 16:47:05.58ID:yA6lKxwPH
訂正) 14万行じゃなくて、12万4千行だった。
ちなみに、データベースを使えば、検索は10ms未満くらいだろう。

682デフォルトの名無しさん (ワッチョイ 6b92-MAHZ)2017/04/24(月) 18:55:11.68ID:wa9g9mEX0
12まんこもデータがあるのか

683デフォルトの名無しさん (アークセー Sx23-lqRy)2017/04/24(月) 19:31:24.31ID:MI7v5nJWx
>>682
まっ!
やらしい

684デフォルトの名無しさん (ワッチョイ 2774-VYzI)2017/04/24(月) 20:24:12.56ID:qZiJ6usO0
12はまだこども

685デフォルトの名無しさん (ワッチョイ 0a92-VYzI)2017/04/24(月) 23:14:20.60ID:8jnUP2CE0
アドバンスフィルタか高速VLOOKUPでも出来るんじゃないのそれ?
1行につき2件以上になることないでしょ?

686デフォルトの名無しさん (ワッチョイ 1e4c-9YAC)2017/04/25(火) 17:35:09.10ID:pwvEjTgk0
質問です
A1〜A10までは値が入っていて
A1〜B10までをそれぞれ行ごとに結合したいとして
Range("A1:B10").Merge True
って書いたんですが
A1からB10までがまとめて結合されて1つのセルになってしまいます
また
Range("A1:B1").Merge

Range("A10:B10").Merge
でも結果は一緒でした
どうしたらいいんでしょうか?

あと
'Range("A1:B1").Merge
Range("A2:B2").Merge

Range("A10:B10").Merge
って1行目の部分だけコメントアウトすると
当然の1行目以外は普通に望むとおりに結合されたりします…

687デフォルトの名無しさん (JP 0H56-MAHZ)2017/04/25(火) 17:47:58.74ID:ibd4gvgdH
>>686
> どうしたらいいんでしょうか?
以下をコピペして実行。
Range("A1:B1").Merge
Range("A2:B2").Merge
Range("A3:B3").Merge
Range("A4:B4").Merge
Range("A5:B5").Merge
Range("A6:B6").Merge
Range("A7:B7").Merge
Range("A8:B8").Merge
Range("A9:B9").Merge
Range("A10:B10").Merge

688デフォルトの名無しさん (JP 0H56-MAHZ)2017/04/25(火) 17:50:32.91ID:ibd4gvgdH
>>686
悪い、
Range("A1:B10").Merge True
でもちゃんと動くわ。

別シートで動作確認してみたら?

689デフォルトの名無しさん (スッップ Sdaa-TkTn)2017/04/25(火) 20:56:42.12ID:fGkaWwL3d
ちょっと前にハマったんだがcsvとかをodbc使ってsqlでデータ取るときに欠損値というかヌルデータあると正常に取ってこれないことがあった
scheme.iniファイル作って列の型を教えてやればうまく行くんだけどもっといい解決策ってあるの?
自称上級者教さん教えてください

690デフォルトの名無しさん (ワッチョイ 0a92-VYzI)2017/04/25(火) 21:27:32.27ID:TtQty10x0
どういう理屈なんだそれ・・・。
("A1:B10")って書いたら("A1:B10")になるに決まってると思うが、
それでちゃんと行ごとになるんだとしたら、
エクセルの変な機能が働いているとしか思えない。
一度テキストをカンマ分割すると、
以降、他の文字も勝手にカンマ分割になるみたいな。

691デフォルトの名無しさん (アークセー Sx23-lqRy)2017/04/25(火) 21:34:39.30ID:COzLxMP1x
>>689
ないあるよ

692デフォルトの名無しさん (ワッチョイ 8a3c-AsB1)2017/04/25(火) 21:56:39.94ID:4tKi7ubl0
>>690
お前の言う変な機能とやらがあるんだわ
Across パラメータな
https://msdn.microsoft.com/ja-jp/library/office/ff840729.aspx
そもそもリボンにも行毎にマージってあるだろ

693デフォルトの名無しさん (アークセー Sx23-IcG6)2017/04/25(火) 22:12:17.10ID:GSmslFOEx
>>692
知らなかった
対象範囲内の行をForループで一個ずつ結合しなくても良いのか

694デフォルトの名無しさん (アークセー Sx23-IcG6)2017/04/25(火) 22:58:07.11ID:GSmslFOEx
今更だがExcelのWorksheet.Rangeクラスは奥深いな

695603 (ワッチョイ abcd-+atG)2017/04/26(水) 19:58:39.56ID:P05qwV3M0
>>680
ありがとうございます

> まず、郵便番号から都道府県を検索するのなら、
> > SELECT [A#csv].[郵便番号], [B#csv].[都道府県]
> > FROM [A#csv] LEFT JOIN [B#csv] ON [A#csv].[郵便番号] = [B#csv].[郵便番号]
> は全く意味が無い。
この意味が分からないです

>SELECT [全国版csv].[都道府県] FROM [全国版csv] WHERE [全国版csv].[郵便番号] = '1234567'
>みたいなクエリで十分。
1234567の部分は別のCSVに保存されています

696デフォルトの名無しさん (アークセー Sx23-lqRy)2017/04/26(水) 20:06:58.08ID:IIJBYCWqx
>>695
inner joinか
whereでサブクエリでよい

697603 (ワッチョイ abcd-+atG)2017/04/26(水) 20:12:37.75ID:P05qwV3M0
>>696
ありがとうございます
>inner joinか
>whereでサブクエリでよい
>>603の条件でその方法を行う場合はどういう風に書けばいいんですか?

>>697
サブクエリやinner joinは分かるの?
あなたの質問って結局「SQLはどう書けば良いの?」ってのと同じになるよ。

サブクエリやinner joinが分からない人は手を出しちゃいけないと思う。

取りあえずサブクエリ、inner joinをググってどういうものか理解してくれ。
そうすれば自ずと答えも分かる。

699デフォルトの名無しさん (アークセー Sx1f-L1Lv)2017/04/27(木) 00:12:24.92ID:iJvaFhDzx
>>697
その書き方を調べて教えて

700デフォルトの名無しさん (JP 0Hff-VhBr)2017/04/27(木) 11:19:53.73ID:L6RVQR+bH
>>697
SELECT [B#csv].[郵便番号], [B#csv].[都道府県]
FROM [B#csv]
WHERE [B#csv].[郵便番号] IN (SELECT [A#csv].[郵便番号] FROM [A#csv])

JOINを使うよりは速くなる可能性はある。

701デフォルトの名無しさん (オッペケ Sr1f-7V4N)2017/04/27(木) 12:56:05.02ID:kP8aj7+Rr
マクロにSQLなんか要らない

702デフォルトの名無しさん (アークセー Sx1f-L1Lv)2017/04/27(木) 16:05:10.74ID:iJvaFhDzx
>>701
えっw

vbaってlinqみたいなの使えるようになったんだ?

704603 (ワッチョイ 5bcd-iGQn)2017/04/27(木) 20:29:51.16ID:K3w/N0C+0
>>698
勉強したくて質問してるんじゃないので、サンプルコードを知りたいです
>>700
ありがとうございます
試してみて報告します

705603 (ワッチョイ 5bcd-iGQn)2017/04/27(木) 20:59:23.08ID:K3w/N0C+0
>>700
教えていただいたSQLだとAにあってBにない場合表示されませんでした
Aに書いてある郵便番号が、Bの郵便番号一覧にない場合でも表示させたいです


あと型エラーが出たのでCStr()で変換していたんですが、これが遅い原因でした・・・
レスいただいたので気づけてよかったです ありがとうございます
SELECT [B#csv].[郵便番号], [B#csv].[都道府県]
FROM [B#csv]
WHERE CStr([B#csv].[郵便番号]) IN (SELECT CStr([A#csv].[郵便番号]) FROM [A#csv])

706603 (ワッチョイ 5bcd-iGQn)2017/04/27(木) 21:17:07.36ID:K3w/N0C+0
>>700
連続ですいません
教えていただいたこれは、A内で重複してると出てこなかったり使い物になりませんでした
SELECT [B#csv].[郵便番号], [B#csv].[都道府県]
FROM [B#csv]
WHERE [B#csv].[郵便番号] IN (SELECT [A#csv].[郵便番号] FROM [A#csv])

くさってやがる・・・的な

707デフォルトの名無しさん (アークセー Sx1f-L1Lv)2017/04/27(木) 22:44:31.62ID:iJvaFhDzx
>>704
教えて
なんの目的でサンプルコードだけを
知りたいの?

あと使ってる表現が気にさわる
点があるから注意しな。
便利に人を使いたいんだからさ
尚更気をつけて!

708603 (ワッチョイ 5bcd-iGQn)2017/04/27(木) 23:24:30.11ID:K3w/N0C+0
>>707
質問スレに教員教諭は要りません
そういうのは学校でやってください

709デフォルトの名無しさん (ワッチョイ 6fa6-Ahd3)2017/04/27(木) 23:30:45.97ID:SC2pFUWd0
回答スレではないけどね

710603 (ワッチョイ 5bcd-iGQn)2017/04/27(木) 23:42:19.47ID:K3w/N0C+0
>>709
といいつつも、ID:iJvaFhDzxみたいな可愛げのあるレスは嫌いじゃないです

711デフォルトの名無しさん (アークセー Sx1f-L1Lv)2017/04/27(木) 23:44:35.25ID:iJvaFhDzx
>>708
そっか
因みに自分が書いた内容は
全部ウソだから気をつけて!

712デフォルトの名無しさん (ワッチョイ 6fc8-GpoV)2017/04/28(金) 12:40:08.45ID:AZuqyiJa0
分かって無い奴はこれだから...
どうせ回答してもこういう奴は結局地雷を踏むんだよ。
で、また人にやらせようとする。

いつまでたっても炎上案件の出来上がりってわけだ。

713デフォルトの名無しさん (ワッチョイ eb92-VhBr)2017/04/28(金) 12:56:16.20ID:TvRV/cfz0
無事に納期守って大っきな案件終わらせたから
クールダウンがてらに作ってやってもいいぞ
仕様とどういう結果が欲しいか書いてみ
結果っつーか、都度都度の運用の仕方か?
こういう使い方をしたい って部分な

>>708
質問に対してどう答えようが勝手だろ
お前が決めるなよ馬鹿

715デフォルトの名無しさん (スップ Sd7f-g3iM)2017/04/28(金) 14:29:52.94ID:Xu7UKOdRd
平和な日々が続くと思っていた>>713のにかかってきた一本の電話

716デフォルトの名無しさん (アークセー Sx1f-L1Lv)2017/04/28(金) 15:11:21.05ID:Xuq4yDdbx
>>715
ふむ

続けて

717686 (ワッチョイ 0f4c-WBDQ)2017/04/28(金) 16:18:44.69ID:J5UeIBKP0
質問させていただいた者ですが、自己解決(?)しました
別のPCでの再現性さえ不確実で」あったりなかったり、という状態に陥ったので
Officeの修復やら対象ファイルの修復やらMergeの後にやっていたHorizontalAlignmentの設定をMergeの前に持ってくるやら
なんか色々いじくり回したら問題の現象は起きなくなりました…

718603 (ワッチョイ 5bcd-iGQn)2017/04/28(金) 20:00:39.34ID:vpgOvlOj0
>>711
むしろ好きです
お付き合いを前提に結婚してください

>>713
ありがとうございます
もう少し自分で試してみます
それでできなかった時はぜひお願いします

719デフォルトの名無しさん (ワッチョイ 6f92-VhBr)2017/04/28(金) 23:19:33.93ID:FQ8Ywjkm0
誰だ? お前?
気安くアンカー打つんじゃねえよ 気持ち悪ぃ奴だな

720デフォルトの名無しさん (アークセー Sx1f-L1Lv)2017/04/28(金) 23:27:00.92ID:Xuq4yDdbx
>>719
うーん
ふーむ

721デフォルトの名無しさん (ワッチョイ 4bc7-7V4N)2017/04/29(土) 00:23:48.32ID:QOk6w6Nc0
お前らエクセルで何作ってるの?

722デフォルトの名無しさん (スプッッ Sd7f-dUup)2017/04/29(土) 00:48:37.53ID:tMedruP7d
エクセルは何かを作る道具ではありません

723デフォルトの名無しさん (ワッチョイ eb1f-WBDQ)2017/04/29(土) 11:24:35.52ID:wx7/NJX10
>>721
データベースアプリ

>>721
集計ツール

725デフォルトの名無しさん (アークセー Sx1f-L1Lv)2017/04/29(土) 13:12:46.39ID:VcR7YP/mx
>>721
DB hub

726デフォルトの名無しさん (ワッチョイ 5b92-VhBr)2017/04/29(土) 15:58:32.70ID:/JeXwZCJ0
>>721
上司からの信用

727デフォルトの名無しさん (ワッチョイ 5f92-dUup)2017/04/29(土) 23:08:12.21ID:d9nXIGfe0
>>721
ワード
パワーポイント

728デフォルトの名無しさん (ワッチョイ 1b95-yNuH)2017/04/30(日) 00:52:10.19ID:rWDOU3pY0
バッチファイル

729デフォルトの名無しさん (ワッチョイ 8b0a-XZJj)2017/04/30(日) 08:40:48.80ID:6z9rlT7i0
>>721
補助金申請資料

730デフォルトの名無しさん (ワッチョイ 1bb2-XZJj)2017/04/30(日) 10:01:05.52ID:vmdJMlSA0
>>721
ナンプレとかロジックとか百ます計算作るには便利だよ

731デフォルトの名無しさん (ワッチョイ eb1f-WBDQ)2017/04/30(日) 12:17:14.54ID:vNrNk3fw0
>>721
ロールプレイングゲーム

732デフォルトの名無しさん (ワッチョイ 6f8e-L3TU)2017/05/01(月) 23:49:42.89ID:nhotaK4o0
vlookupやindex+matchみたいに楽に検索をする方法ってありますか?
いつもfor nextで回して値を取得しているのですが
自作関数を作ったほうが良いのでしょうか

733デフォルトの名無しさん (ワッチョイ 1b44-YTUC)2017/05/01(月) 23:55:35.44ID:7yf17Mlr0
>vlookupやindex+matchみたいに
なら vlookupやindex+match 使えば良いんんじゃね?
それがダメな理由あるの?

734デフォルトの名無しさん (ワッチョイ 6f8e-L3TU)2017/05/02(火) 00:08:55.38ID:avk+HCZA0
>>733
・長い
・間違いやすい
です

例えばmatchですと
application.WorksheetFunction.match(
ここまで打つと、ヒントはarg1,arg2…としか表示されません。第一引数が検索値なのか、範囲なのかわかりません
エラーになればいいのですが、エラーはあまり起こらないので、ミスにつながりやすくなっています

また、cells()だけだと、activateなシートのcellsと解釈されてしまいます
複数シート・ブックを扱う際には間違う危険が大きいです

with句も2ブック、2シートまでなら便利ですが、3以上のブックやシートを扱うと逆にわかりづらくなります

こういうのも慣れで対処しているのでしょうか

735デフォルトの名無しさん (ワッチョイ 1b44-YTUC)2017/05/02(火) 00:20:45.61ID:XYNewSDv0
>>734
なるほど そうゆう理由なら
range.find()+offset() を使うか自作function作るかだな


ちなみに 長いは 隠し(隠れてないが・・インテリジェンスが効かないという事で・・)
application.match
としても動作する
application.WorksheetFunction.match
application.match
この動作の違いは #N/A の時 前者は実行時エラー 後者はエラー値が返る事
(引数が 分りにくいのは一緒だけど)

736デフォルトの名無しさん (ワッチョイ 0fd0-L1Lv)2017/05/02(火) 00:26:30.98ID:RrM3uHby0
>>734
「長い、間違えやすい」の対処法であれば、ラッパー関数を作るのがパターンだよ。
言語によらない一般的な解決法。
機能が足りないとかなら、既に存在しないか探すのは第一手段として有効。
だけど、長いとか間違えやすいと言うのは主観的なものなので、探したところで代替機能はないと思うよ。

737デフォルトの名無しさん (ワッチョイ 0b4c-XZJj)2017/05/02(火) 00:32:07.84ID:05n65Ap80
実装が楽 → ラッパー関数
覚えるのが楽 → 自作関数

状況によりけりだけど、Worksheetfunctionと同じ機能を自分で実装できるようになる頃には、
ラッパー関数は無駄な労力を使ってる気になってくるので最初から自作関数の方が良いといえば良いかなぁ。

738デフォルトの名無しさん (ワッチョイ 6f8e-L3TU)2017/05/02(火) 00:37:15.16ID:avk+HCZA0
>>735-737
色々な方法を教えてくださり、ありがとうございます
どれがベストかは、なかなか難しそうです
模索してみます

739デフォルトの名無しさん (ワッチョイ 0fd0-L1Lv)2017/05/02(火) 00:59:01.38ID:RrM3uHby0
>>737
まあ、そうなんだけど、考え方次第。
何もWorksheetFunctionの機能で済むところを、わざわざフルスクラッチする必要無いでしょって言う。
ってか、ラッパーなんて手間でも何でもないぞ…

740デフォルトの名無しさん (ワッチョイ 5b92-VhBr)2017/05/02(火) 14:55:22.37ID:zdYuWX4z0
後付けの理由って自分でやる気がないように見えるな

741デフォルトの名無しさん (JP 0Hff-VhBr)2017/05/02(火) 15:09:39.79ID:icdrLzQNH
>>737
> 覚えるのが楽 → 自作関数
ごくごく単機能ではない場合、後からメンテする時に「このコード何やってんだ」となりかねない危険性はある

742デフォルトの名無しさん (ワッチョイ 5f92-dUup)2017/05/03(水) 13:49:00.61ID:Gwe9GRzP0
>with句も2ブック、2シートまでなら便利ですが、3以上のブックやシートを扱うと逆にわかりづらくなります

Dim 何か分かりやすいシート名 As Worksheet
Set 何か分かりやすいシート名 = ThisWorkbook.Worksheets("元のシート名")

で、何か分かりやすいシート名の方を使う。

743デフォルトの名無しさん (オッペケ Sr1f-dX+h)2017/05/03(水) 14:39:50.60ID:wUGLXKixr
オブジェクト式を処理の途中で頭からいちいち書こうとしたり、With句で中途半端にまとめようとしたりすると煩雑になる

Worksheet型なりWorkbook型なりのオブジェクト変数にオブジェクト参照を代入すれば処理の途中で煩雑な参照式を書かなくて済むし、
オブジェクト変数を使えるならFor Each Object In Collectionループや Select Case True文でオブジェクト操作すると楽だったりする

744デフォルトの名無しさん (ワッチョイ 5faa-T7ds)2017/05/03(水) 19:14:49.89ID:wJSaUc+P0
C#を覚えてVSTOアドインを書こうとしているがC#さっぱりわからない。voidって何だよw

745デフォルトの名無しさん (ワッチョイ 6fa6-Ahd3)2017/05/03(水) 19:48:12.02ID:ydLfqOuU0
>>744
関数の戻り値のことだとしたら Sub と同じだと思えばいいけど

746デフォルトの名無しさん (スプッッ Sd7f-dUup)2017/05/03(水) 19:59:13.29ID:qPjUe8z0d
ヴォイド
SF系ぽいラノベとか割とよく出てくる

747デフォルトの名無しさん (オッペケ Sr1f-dX+h)2017/05/03(水) 21:03:00.41ID:RFgMuQ6Sr
>>744
C#詳しくないけど、ポインター型か関数の戻り値の型の一種だよね確か

748デフォルトの名無しさん (スプッッ Sd7f-dUup)2017/05/03(水) 21:50:37.59ID:m/iWu/Gkd
動作を定義してるだけだから厳密には型じゃない
たまたま型と同じ所に書いてるだけ

749デフォルトの名無しさん (オッペケ Sr1f-dX+h)2017/05/03(水) 21:52:05.80ID:RFgMuQ6Sr
マイクロソフトのドキュメントに型だって書いてあるんだけど違うの?

750デフォルトの名無しさん (ワッチョイ 6fa6-Ahd3)2017/05/03(水) 22:23:43.51ID:ydLfqOuU0
型だよ

751デフォルトの名無しさん (ワッチョイ 0b4c-XZJj)2017/05/03(水) 22:40:55.84ID:6gIWvrML0
Nothingと同じようなもんで「ないアルヨ」って言ってるのがvoid。

752デフォルトの名無しさん (ワッチョイ 5f3c-lWNK)2017/05/03(水) 22:50:07.34ID:yMHwWAzs0
厳密に型です
typeof(void) とかできるし

753デフォルトの名無しさん (ワッチョイ 5f3c-0aF+)2017/05/03(水) 23:05:56.70ID:KtRh/Jcn0
型に何を期待するのかによる

特殊な型として理解してもいいし
関数のシグニチャを示すためのキーワードだけど
便宜的に型と呼ばれてると理解してもいい

varも特殊な型(implicit type)として
ドキュメントにはのってるけど現実的にはキーワードだよね

754デフォルトの名無しさん (ワッチョイ fe8e-Ogwz)2017/05/04(木) 00:55:35.47ID:d0nEeZx40
void === null === nothing
でいいのかな?
どうせ使うのは、if分岐でfalseになるかどうかだしあんまり気にしていない

755デフォルトの名無しさん (ワッチョイ f23c-q6do)2017/05/04(木) 01:26:03.78ID:7TNYL3q70
>>754
nullはNothingと同じだけどvoidは違うよ

C#: void Hoge()
VB: Sub Hoge() (意味的にはFunction Foo() As Void)

C#: int Foo()
VB: Function Foo() As Integer

Nothingやnullは変数に代入して値がないっていう意味の値として使えるけど
voidは関数が何も返さないことを示す印なので変数に代入できないし比較したりもできない

756デフォルトの名無しさん (ワッチョイ fe8e-OgWb)2017/05/04(木) 01:35:59.26ID:d0nEeZx40
>>755
なんと!ありがとう!

757デフォルトの名無しさん (ワッチョイ 934c-HG4F)2017/05/04(木) 01:49:27.51ID:y6qsqiUz0
名称が違うって事は等価ではないって事だから、
こんなところで半端な知識を得るよりも、違いが分かるまで色んな文献当たるべきだと思うけど。

758デフォルトの名無しさん (ワッチョイ fe8e-OgWb)2017/05/04(木) 02:05:19.39ID:d0nEeZx40
>>757
別言語から入った場合は、確認作業になるんだよ

759デフォルトの名無しさん (ワッチョイ 323c-10U+)2017/05/04(木) 07:48:16.41ID:F88t7MBG0
>>753
> 便宜的に型と呼ばれてると理解してもいい
なんでそんな嘘書くかなあ
便宜的じゃなくて厳密に型だよ
System.Void構造体の別名だし

> varも特殊な型(implicit type)として
> ドキュメントにはのってるけど現実的にはキーワードだよね
違うよ
var var = 1;
とか書けるし
(if はキーワードだから var if = 1; はエラーになる)
詳しくは
コンテキストキーワード C#
とかでググれ

760デフォルトの名無しさん (オッペケ Srf7-15LB)2017/05/04(木) 08:25:17.57ID:/oGtXq+9r
>>759
C#をこれから勉強しようとしてるVBerだが、こういうツッコミは助かるし勉強になる
753を読んでかなり胡散臭いなぁと思ってた

761デフォルトの名無しさん (ワッチョイ 9b74-FFaT)2017/05/04(木) 08:47:48.19ID:dFxnoPMm0
本当は型じゃないんだけど、型と同列に扱えた方がプログラミングしやすいから
とりあえず型にしとこう、ってのがvoid

「言語仕様上は型」「現実には型ではありえない」
どっちも正解という矛盾した存在なんだよ

MSDNのvoid構造体は言語の仕様を説明してるだけ
その説明も矛盾してるんだけど突っ込まないのがお約束

762デフォルトの名無しさん (ワッチョイ 3235-Ogwz)2017/05/04(木) 08:57:08.01ID:QHnFD5OV0
>>760
ババアなのですか?

763デフォルトの名無しさん (ワッチョイ 323c-10U+)2017/05/04(木) 09:13:42.03ID:F88t7MBG0
>>761
> 「言語仕様上は型」
なら型じゃねーか
矛盾してるのはお前の頭の中だけだろ w

764デフォルトの名無しさん (ワッチョイ 9b74-FFaT)2017/05/04(木) 09:17:30.40ID:dFxnoPMm0
>>763
あ、今ちょっとバカには理解できない難しい話をしてるんで黙っててくれますか

765デフォルトの名無しさん (ワッチョイ 323c-10U+)2017/05/04(木) 09:41:20.35ID:F88t7MBG0
根拠も示せずに
> 本当は型じゃないんだけど、型と同列に扱えた方がプログラミングしやすいから
> とりあえず型にしとこう、ってのがvoid
ってほざかれてもね w

766デフォルトの名無しさん (オッペケ Srf7-15LB)2017/05/04(木) 10:56:03.58ID:F61TgSgFr
>>762
ジジイだけどババアだよ

767デフォルトの名無しさん (アウアウカー Sa1f-n7Uy)2017/05/04(木) 11:48:18.28ID:gk/7C+2ja
質問です。初心者です。
コーディングの仕方をネットで調べていたら、withの途中でExit subなどで抜けるとエラーが発生する可能性がある。と書いてあったのですが、
with ××
if ××◯◯ then
××◯◯
else
◯◯
exit sub
end if
end with
としたい場合はどうすれば良いでしょうか?
お願いします。

768デフォルトの名無しさん (ワキゲー MM0a-G+6H)2017/05/04(木) 12:04:06.32ID:lrW32DK5M
単芝滅ぶべし

769デフォルトの名無しさん (オッペケ Srf7-15LB)2017/05/04(木) 12:38:39.50ID:F61TgSgFr
>>767
心配ならいまExit SubにしてるとこをGoTo 文に変えて、Withブロックの外のラベルに一旦抜けるようにしてみたら?
飛んだ先でExit Subで処理を抜けるようにすれば良いし、エラー対策もそっちでやればいいんじゃないかな
ただし濫用はおすすめしないが

770デフォルトの名無しさん (ワキゲー MM0a-G+6H)2017/05/04(木) 12:49:07.08ID:lrW32DK5M
>>767
withにせず必要なものを変数に格納してから処理するとかでもいいんじゃない?

771デフォルトの名無しさん (ワッチョイ 3230-Wm8h)2017/05/04(木) 13:16:33.00ID:yfNHJjRa0
…てか、
>withの途中でExit subなどで抜けるとエラーが発生する可能性がある
というのは事実なのかな…

772デフォルトの名無しさん (スップ Sd52-umis)2017/05/04(木) 13:24:59.37ID:TFiCOsvdd
初耳だな

773デフォルトの名無しさん (アウアウカー Sa1f-n7Uy)2017/05/04(木) 13:27:26.31ID:gk/7C+2ja
>>769>>770
回答ありがとうございます。
別の方法で試してみます。

>>771
確かかはわかりませんが、対処出来るならしておこうと思いまして

774デフォルトの名無しさん (オッペケ Srf7-15LB)2017/05/04(木) 13:30:05.88ID:F61TgSgFr
>>773
エラーが起きるって書いてあったそのページのURL貼ってくれませんか
そしたらその情報の真偽自体を確かめられるので

>>767
> コーディングの仕方をネットで調べていたら、withの途中でExit subなどで抜けるとエラーが発生する可能性がある。と書いてあった
どこ?
URL晒してみて
そんなの聞いたことがないんだけど

776デフォルトの名無しさん (ワッチョイ b292-FFaT)2017/05/04(木) 13:57:19.81ID:Dx8Sp3kd0
自由度が高すぎるとかえって混乱する。
Functionで値を返すのと、ByRefで返すのは何が違うか分からんし、
セルがあるのに、何でListObject(白と青の縞々のやつ)があるのかも分からん。

777デフォルトの名無しさん (ワッチョイ fe8e-odle)2017/05/04(木) 14:04:55.66ID:d0nEeZx40
>>776
・Functionで値を返す
Functionで値を返しているだけ
・ByRefで返す
これは返してるんじゃなくて参照渡しにしている。グローバル変数とでも思ってればいい

778デフォルトの名無しさん (JP 0H0e-W+y+)2017/05/04(木) 14:30:06.03ID:mDQwZSbEH
>>777
グローバル変数という説明はないでしょ・・・

779デフォルトの名無しさん (アウアウカー Sa1f-n7Uy)2017/05/04(木) 14:32:15.00ID:ogGT+5IYa

780デフォルトの名無しさん (オッペケ Srf7-15LB)2017/05/04(木) 14:59:14.87ID:F61TgSgFr
>>776
ここですね↓

With 〜 End With の途中で抜けない

エラーが発生する可能性があるので、下記のようなコードは禁止

With hoge
.A = 2
.B = 3
Exit Sub
End With

(以上)*******

この記事はコーディング規約(トラブル回避のためにプロジェクト内で決めるコーディングのルール)の一例の紹介なので、書かれている内容はVBAの言語仕様上必然的に生じる制約に対応するルールであるとは限らないです。

問題のWith句の箇所ですが、正直、場合によるとしか言えないです。
hogeが自作クラスのインスタンスだったら、メソッドやプロパティの設計によってはエラーになりそう。
自分個人の意見としてはWith句の仕様に関してこういうルールが必要かどうかは疑問かな。

781デフォルトの名無しさん (オッペケ Srf7-15LB)2017/05/04(木) 15:04:44.60ID:F61TgSgFr
>>776
ListObjectのUI上の呼び方はテーブルだよ。
ワークシート上で構造化参照やデータリレーションの追跡機能を実現するためにエクセルに追加された比較的新しい機能で、使えると非常に便利。

ちなみに色は青白とは限らない。
既定のスタイルがそうなっているから何も設定しないでListObjectを作製すると青白になるだけで、色は自由に設定できる。

782デフォルトの名無しさん (JP 0H0e-W+y+)2017/05/04(木) 15:05:58.19ID:mDQwZSbEH
>>780
うーん、エラーになるというのは思い込みじゃないかな。
そうじゃないと、こんなことできないし。

on error goto my_exit
with hoge
  call foo(.a, .b) ' foo()内で実行時エラーが発生する可能性あり
  call bar(a) ' bar()内で実行時エラーが発生する可能性あり
  '何か処理
end with
my_exit:

foo()やbar()じゃなくて、ビルトインメソッドの場合でも、実行時エラーが発生するものは呼べなくなる。

実行時エラーのwithブロック脱出は良くて、gotoやexit subはエラーが発生する可能視あり、というのも微レ存。

783デフォルトの名無しさん (オッペケ Srf7-15LB)2017/05/04(木) 15:14:49.45ID:F61TgSgFr
>>776
ByRefの場合、引数の値の参照先として呼び出し元が使用していたアドレスへの参照そのものが一旦関数に渡り、戻り値とともに呼び出し元に返されるので、関数内で引数に加えた変更が呼び出し元に引き継がれる。

784デフォルトの名無しさん (ワッチョイ be7a-y3Lx)2017/05/04(木) 15:43:03.22ID:1SZDThOE0
With使ったからエラーになるなんてことはないだろ

With hoge
.A = 2
.B = 3
Exit Sub
End With
もしこれがエラーになるっていうなら

hoge.A = 2
hoge.B = 3
Exit Sub
でもエラーになるんじゃね

だれか、上だとエラーで下だとエラーにならないサンプルコード書ける?

Withの間に制御構造いれるなって意見にはまあ賛同するけど

785デフォルトの名無しさん (ワッチョイ 3230-Wm8h)2017/05/04(木) 16:09:37.58ID:yfNHJjRa0
VBScriptについての古い記事↓だと
https://msdn.microsoft.com/ja-jp/library/cc392475.aspx

>With ブロックへのジャンプも With ブロックからのジャンプも行わないでください。
>With ブロックのステートメントは実行されますが、With ステートメントまたは End With ステートメントが実行されません。
>その結果、エラーや予想外の動作が発生することがあります。"

とはある。

でも、最近(Office2013以降)のVBAのページ↓では
https://msdn.microsoft.com/ja-jp/library/office/gg264723.aspx

>一般に、With ブロックにジャンプしたり With ブロックからジャンプしたりしないことをお勧めします。
>With ブロック内のステートメントが実行されていて、With ステートメントまたは End With ステートメントが実行されていない場合、
>オブジェクトへの参照を含む一時変数は、プロシージャが終了するまでメモリに残ります。"

とあるので、
Exit For やら GoTo やらで同一プロシージャ内のどこかにジャンプしたときに、
End Withが実行されていないために問題が起きる恐れがあるとは言えるけど
Exit Sub では問題は起きないんじゃないかと思う。

しかしまぁ、Withからの途中脱出がMSからお勧めされていないのは確かだったので、
対応するとすれば
プロシージャ脱出フラグを用意して、Withブロック内で判定してフラグをセット
→Withを抜けてからフラグに応じてExit Sub
とでもするべきなのかな…?

786デフォルトの名無しさん (JP 0H0e-W+y+)2017/05/04(木) 16:12:51.32ID:mDQwZSbEH
>>784
> Withの間に制御構造いれるなって意見にはまあ賛同するけど
with hoge
  for i = 1 to 100
    call hoge(i, .a)
    call fuga(i, .b)
  next
end with

for i = 1 to 100
  with hoge
    call hoge(i, .a)
    call fuga(i, .b)
  end with
next

俺は上が好み。
(だが、今までそう書いたことあるかどうかは、記憶にない)

787デフォルトの名無しさん (ワッチョイ c3e6-lr4m)2017/05/04(木) 16:13:35.30ID:JxiK4Hzx0
ジャンプするならWithを使うなって結論になるな
一つ賢くなったわ
まあWithなんてヘッダー・フッターのプロパティを多数設定する時くらいしか使わんけど

788デフォルトの名無しさん (JP 0H0e-W+y+)2017/05/04(木) 16:19:00.71ID:mDQwZSbEH
>>785
> でも、最近(Office2013以降)のVBAのページ↓では
> https://msdn.microsoft.com/ja-jp/library/office/gg264723.aspx
なるほど、勉強になります。

でも、まだちょっと納得できないなぁ。
withを使わなくても、プロシージャ内のローカル変数は、普通プロシージャが終了するまで残るものだから。
ひょっとして、プロシージャ途中でのset myobj = nothing推奨なのか?

789デフォルトの名無しさん (ワッチョイ be7a-y3Lx)2017/05/04(木) 17:01:00.71ID:1SZDThOE0
>>786
それ上と下ではWithの実行回数が違うから、パフォーマンスに差が出る可能性がある
パフォーマンス目的でWith使うなら、できるなら上のほうがいいだろ

>>788
メモリに残るってのは、Withによって生成される暗黙的な変数参照のことじゃないのか
それは通常 End Withで廃棄可能になる
そう考えると、Withの途中でジャンプすると、アプリ内とはいえメモリリークの原因になりえるかもな

790デフォルトの名無しさん (ワッチョイ fe8e-CFHd)2017/05/04(木) 17:02:28.72ID:d0nEeZx40
今まで考えてなかったけど、End Withってメモリの解放してるだけなのか

>>788
> >オブジェクトへの参照を含む「一時変数」は、プロシージャが終了するまでメモリに残ります。
なのでWith文で確保した変数(プログラマーには見えない)のことでしょ
L:
With MyObj
.a = 1
Goto L
End With
とかやると問題になるのかもしれないけど通常は大丈夫だと思う

792デフォルトの名無しさん (JP 0H0e-W+y+)2017/05/04(木) 17:10:07.44ID:mDQwZSbEH
>>790
俺も、End Withが単独のステートメントであるというのを、ヘルプ読んで知ったよ。

793デフォルトの名無しさん (オッペケ Srf7-15LB)2017/05/04(木) 18:31:35.10ID:F61TgSgFr
>>792
以下全部、独立したステートメントみたいだね

End
End Function
End If
End Property
End Select
End Sub
End Type
End With

794デフォルトの名無しさん (ワッチョイ f23c-q6do)2017/05/04(木) 18:36:02.44ID:7TNYL3q70
>>759
君が書いてるようなことは当然把握した上で
voidが分からないとか型なの型じゃないの?って言ってる人に理解してもらうの書き方
varはキーワードじゃないけど「現実的にはキーワード」だよねって言ってるの理解できない?

795デフォルトの名無しさん (ワッチョイ 323c-10U+)2017/05/04(木) 18:53:23.57ID:F88t7MBG0
>>794
わざわざ嘘を教えるとか全く理解できない
普通にMSDNで充分だし

796デフォルトの名無しさん (オッペケ Srf7-15LB)2017/05/04(木) 19:00:11.51ID:F61TgSgFr
>>794
Voidが型なのか型じゃないのかっていう問いに決着をつけさせてあげようって意図は分かる
だけど前提の説明を省いて「Voidに何を期待するかで型か型じゃないのか決まる」って言ってたら、Voidそのものを正しく理解してもらうことに繋がらないよね

797デフォルトの名無しさん (ワッチョイ 323c-10U+)2017/05/04(木) 19:23:07.40ID:F88t7MBG0
「何を期待する」とか言ってるのは俺じゃないし厳密に型なんだから型と思ってもらうのが正しい理解
その上でC#ではいくつかの制限(例えば変数宣言には使えない)があると言うだけのこと

798デフォルトの名無しさん (ワッチョイ df44-/yZT)2017/05/04(木) 19:28:16.32ID:Bn9E77QS0
えっと・・・・・ここ いつから C# も扱うスレになったのだ???

799デフォルトの名無しさん (ワッチョイ 323c-10U+)2017/05/04(木) 20:10:04.06ID:F88t7MBG0
ああすまん、>>760 のようなVBer向けなので引っ張るつもりはないんだが、嘘を信じられても困るので

800デフォルトの名無しさん (ワッチョイ f23c-q6do)2017/05/04(木) 21:13:42.94ID:7TNYL3q70
>>796
voidに何を期待するかじゃなくて型に何を期待するかって書いてるでしょ
全く意味違うよ

voidがわからないって言ってる人に
voidは型だよって答えたら正しく理解してもらえるのかな?

801デフォルトの名無しさん (ワッチョイ cf92-W+y+)2017/05/04(木) 21:36:52.57ID:8LGDHJ/L0
voinならわかる

802デフォルトの名無しさん (ワッチョイ 323c-10U+)2017/05/04(木) 22:05:10.35ID:F88t7MBG0
>>800
「voidに何を期待するか」って書いてるのは君だけなんだけど頭大丈夫?

> voidがわからないって言ってる人に
> voidは型だよって答えたら正しく理解してもらえるのかな?
>>760 はそこそこ理解したみたいだけどね

803デフォルトの名無しさん (オッペケ Srf7-15LB)2017/05/04(木) 23:14:36.67ID:F61TgSgFr
>>800
俺の書き間違いだった、ごめん
>>753は型に何を期待するかによる、と書いてるね

System.Void構造体の実装と役割が特殊であるという前提知識の下、型の概念が多様であることを踏まえて753を読むと確かに分かりやすい
前提知識がなかったから宙に浮いた話に聞こえた
間違ったことは書いてないっぽいね

ちなみにMSDNのtypeof演算子の項では、普通のtypeof(type)とtypeof(void)を厳密に区別して書きつつ、
typeof(void)から返されるのは型が存在しないことを示す特殊なSystem.Typeオブジェクトだと書いてるね
これだと確かに、voidは型だよと言いきってしまう人の方が勇み足に思える
型って言ってるけどいかなる意味で型なのか明らかにしないと意味がない感じ

https://msdn.microsoft.com/ja-jp/library/aa691348(v=vs.71).aspx

804デフォルトの名無しさん (ワッチョイ df44-/yZT)2017/05/04(木) 23:20:15.45ID:Bn9E77QS0
>>800-803 と void 云々議論したいやつ

誘導してやるから そこで思う存分議論してくれ
C#, C♯, C#相談室 Part94
http://echo.2ch.net/test/read.cgi/tech/1492843013/

805デフォルトの名無しさん (ワッチョイ bea6-Ogwz)2017/05/04(木) 23:33:22.87ID:fxaUnXhO0
C#のvoidについて決着がついたとしてもVBAに生かせるか全く不明ですしねえ

>>803
.NET 2003?
そんな古いドキュメント見て何をしたいんだよ w
こっち見とけ
https://msdn.microsoft.com/ja-jp/library/58918ffs.aspx
てか既に終わった話だぞ

807デフォルトの名無しさん (ワッチョイ df44-/yZT)2017/05/04(木) 23:48:42.25ID:Bn9E77QS0
スレ違いだから >>804 で誘導した訳だが 認知症? 社会不適合者? がいじ?

808デフォルトの名無しさん (ワッチョイ f2aa-PboC)2017/05/07(日) 19:51:31.74ID:rg4zCOHW0
昨日、たまたま見たサイトでfalseの読みが「フォルス」と知ってショックを受けた。10年ぐらい
「ファルス」と思い込んでいた。人前でこんな話する事がないから良いっちゃ良いんだがなんか情けない。
そういうえば、Integerの読みをずっと「インテガー」と思い込んでいてPCショップの店員に爆笑された事があったな

809デフォルトの名無しさん (ワッチョイ 0fc8-zqBD)2017/05/07(日) 19:53:40.98ID:fxrcEjmN0
それはさすがにw
まあ、ローマ字表記なんてものがあるから面倒なことになるんだよな

810デフォルトの名無しさん (スッップ Sd52-WvqP)2017/05/07(日) 19:56:36.46ID:mMrRcYbLd
え?
いんてがーじゃないの?
独学だから気にもしなかった

811デフォルトの名無しさん (ワッチョイ fe8e-Wvef)2017/05/07(日) 19:59:12.71ID:N14pdsJK0
>>808
独学やsohoだとその辺全く鍛えられないよね
しかもツッコミにくい

みんなも「プログラミング用語 発音」あたりで一度検索して目を通しておこう
っていうか通しておいて。聞く方も気まずいんで。

812デフォルトの名無しさん (ワッチョイ 934c-HG4F)2017/05/07(日) 21:02:58.89ID:1dxWqAm50
そもそも国毎に読み方違うし、現地語じゃないものの読み方なんてバラバラで当たり前だから気にする事じゃ無い。
何か統一された読み方があるって思い込まない方がいいよ。

ちなみに俺は「false」を他人に伝える時は「フェイルス」と呼んでるわ。
フォールスだと初めて聞く人は分からないし、ファルスだと聞き取りにくいという理由で。

813デフォルトの名無しさん (ワッチョイ fe8e-GZOZ)2017/05/07(日) 21:09:57.56ID:N14pdsJK0
>>812
それ言われると「え?え?」ってなると思う…というか俺はなるかな
プリンみたいに、慣習として合わせたほうが良いと思う
プリンの本来の読み方はプディング、でも最近はプディングと読むようになってきたからますますややこしいんだけどね

814デフォルトの名無しさん (ワッチョイ 3235-Ogwz)2017/05/07(日) 21:18:20.33ID:IEEQ9ceb0
pingコマンドの反応でreply from......というのがあるんだけど
前の会社のプロバイダのコールセンターで働いてたときに同僚がこのreplyをいつも「リプレイ」と呼んでたのを思い出した。

人間関係は
・親友
・友達
・同僚
・顔見知り
・名前だけ知ってる
といろいろあるけど下にいくほど訂正してあげづらい。上下関係ならさらにそう。上司には言いにくい。

815デフォルトの名無しさん (ワッチョイ 3230-Wm8h)2017/05/07(日) 21:18:31.62ID:ihhnzTgu0
国ごとに違うって…英語は英語読みでいいだろ…
>初めて聞く人は分からない
ったって、嘘の発音教えてどうすんのw
特に「フェイルス」はfailsと勘違いさせる恐れがあってダメすぎる

816デフォルトの名無しさん (ワッチョイ 934c-HG4F)2017/05/07(日) 21:19:45.62ID:1dxWqAm50
>>813
ちょっと聞き慣れない言葉とか、普通はその場で擦り合わせるだろ。

817デフォルトの名無しさん (ワッチョイ 3235-Ogwz)2017/05/07(日) 21:20:08.76ID:IEEQ9ceb0
warningもよくある間違い。
それ英語が得意/興味あるという人種をのぞいたら
間違って発音する人の確率のほうが正しく発音できる確率より大きい。

正しくはウォーニングでウァーニングは誤り。

818デフォルトの名無しさん (ワッチョイ 3235-Ogwz)2017/05/07(日) 21:22:11.40ID:IEEQ9ceb0
TCP/IPの発音もおれは「ティースィーピーアイピー」とCは「シー」じゃなく「スィー」といつも言ってたら
上司は「なんか外国人っぽい発音だな。帰国子女かなんかなの?」みたいに言われた。

819デフォルトの名無しさん (ワッチョイ 3235-Ogwz)2017/05/07(日) 21:25:27.65ID:IEEQ9ceb0
オレのように将来の国際語としての英語や今後は英語がどんどん使われるのを意識した意識高い系の人にとっては
いつもなんかしらの英語由来の単語は英語の発音で無意識で記憶するようにしてるから
開発ツールのVisual Studioも「ヴィジュアルステューディオ」と「ステゥーディオ」だ。
普通の人は「スタジオ」らしいけどこれ指摘されたときは「えっウソ、みんな本当にそう発音してるの?」と思ったし今でもそう疑問に思ってる。

820デフォルトの名無しさん (ワッチョイ 32a6-Ogwz)2017/05/07(日) 21:25:58.10ID:WOcAE+7N0
それにつけても「ジットハブ」は少々カッコ悪い

821デフォルトの名無しさん (ワッチョイ 934c-HG4F)2017/05/07(日) 21:26:20.39ID:1dxWqAm50
>>815
嘘の発音が駄目って事は、プログラマはすべからくネイティブ発音を習得しておくべきと?
それにfailsとfalseの扱いって普通は違うから会話の流れで分かるし、混同しやすいなら補足すりゃいいだけ。

ところで俺は双方が発声する形の「会話」を想定して「適当でいいよ」って言っているんだけど間違ってないよね?
なんか説明書か何か作るかのような否定のされ方してる気がするんだけど。

822デフォルトの名無しさん (ワッチョイ 3235-Ogwz)2017/05/07(日) 21:30:18.33ID:IEEQ9ceb0
>>821
適当が一番よくないと思う。
英語風に覚えるならそれで統一すべきだし
日本語のカタカナで覚えるならそれに統一すべき。

そうじゃなきゃ太陽が西からのぼることを覚えるのにあの歌の歌詞の逆だと覚えるやりかたをしてたら
なにかたくさん覚えることがあるときになにが逆でなにが逆じゃなかったかわからなくなる。

823デフォルトの名無しさん (ワッチョイ 3230-Wm8h)2017/05/07(日) 21:35:42.38ID:ihhnzTgu0
>>821
「false」をすでに「フェイルス」と読んでいる集団の中に入ってしまったら
自分も会話は「フェイルス」で合わせるよ
その態度は>>821と同じです

でも「false」を「初めて聞く人」のために「フェイルス」と言うなんてのは
ちょっと理解できない

824デフォルトの名無しさん (ワッチョイ 934c-HG4F)2017/05/07(日) 21:43:27.20ID:1dxWqAm50
>>823
そういう潔癖は、色んな人と関わる上ではあまりプラスに働かないから注意した方がいいよ。
まぁ、プログラマの性分として非常に不愉快であるというのは十分に理解できるんだけど。

825デフォルトの名無しさん (ワッチョイ fe8e-CFHd)2017/05/07(日) 21:49:03.83ID:N14pdsJK0
>>819
俺はエスペランドが標準語になるだろうと本気で勉強したよ
英語(笑)フランス語(w)日本語(笑笑)

現在のエスペランドは方言ができまくって今の中国語みたいな惨状になっている

意識を高くするより、周りに合わせるのがベストだよ・・・

826デフォルトの名無しさん (ワッチョイ 32a6-Ogwz)2017/05/07(日) 21:51:32.89ID:WOcAE+7N0
適当ならいいんじゃんか

827デフォルトの名無しさん (スプッッ Sd52-WvqP)2017/05/07(日) 22:43:12.69ID:A18nUo2qd
習得しやすい呼び名でいい。
恥かくことはあってもテキトーで十分。

828デフォルトの名無しさん (ワッチョイ 92ed-Dtwo)2017/05/08(月) 01:02:18.02ID:JsU++E7G0
所詮日本語なんだからどこまでいっても英語発音とは別物になる
日本語で会話してて特定の単語だけ英語で発音されても気味が悪い
これが正解とか拘らずにその場その場の習慣に合わせるのが一番でしょ
日本語にだって方言があるが、それは間違いではない

てかフランスだってドイツだってみんな現地語読みしてるじゃん
イタリアではこう発音するんだよーとか言ってるじゃん
なら日本ではこう発音する、ここではこう発音するでいいじゃん

829デフォルトの名無しさん (ワッチョイ cf92-W+y+)2017/05/08(月) 02:18:10.62ID:hqMd+j4B0
せやかて工藤

830デフォルトの名無しさん (ワッチョイ b2a8-HG4F)2017/05/08(月) 07:03:09.45ID:K1R5gFvI0
>日本ではこう発音する

その日本でもfalseをファルスなんて言わね

831デフォルトの名無しさん (スプッッ Sdc7-umis)2017/05/08(月) 07:11:35.65ID:Zm2U6kRgd
そのうち八王子読みとか名古屋読みとか出てくるぞ

832デフォルトの名無しさん (ワッチョイ 3235-Ogwz)2017/05/08(月) 09:00:08.02ID:XvFtWWVr0
>>829
変な日本語はしゃべるな

× せやかて工藤
○ そうだからと言って工藤

これで合ってるか?

833デフォルトの名無しさん (アークセー Sxf7-ENOQ)2017/05/08(月) 09:34:00.94ID:ngtCDx2wx
>>832
いやーもの足りん

834デフォルトの名無しさん (ワキゲー MM0a-G+6H)2017/05/08(月) 10:38:31.73ID:HyTEfJQ+M
>>832
工藤さん、あなたの仰りたいことは理解しているつもりなのですが私は次のように考えます。

835デフォルトの名無しさん (スッップ Sd52-JXI4)2017/05/08(月) 11:05:14.57ID:iSQgvr1Ud
integerだっていんてジャーじゃなくてインティジャーだぞ

836デフォルトの名無しさん (ワッチョイ efd5-HG4F)2017/05/08(月) 11:11:23.37ID:KFotV+4r0
アクセントの位置もたまに気になる
integer(インテジャー)でテにアクセントつける人が身近にいる

いやいいんだけどさ、
そういうとこが気になって話が入ってこなくなるときがあんのよ

837デフォルトの名無しさん (スプッッ Sdc7-umis)2017/05/08(月) 11:28:58.40ID:Zm2U6kRgd
方言の発生は防げないだろうよ

838デフォルトの名無しさん (ワッチョイ 3235-Ogwz)2017/05/08(月) 11:41:25.09ID:XvFtWWVr0
派遣会社の「インテリジェンス」の人と話したことがあるが
自社の人のくせに「イ」にアクセントを話している営業がいた。
オレはその会社名を言わねばならないときに正しく「テ」にアクセントを置いてしゃべってるのにだ。

839デフォルトの名無しさん (ワッチョイ 630a-zqBD)2017/05/08(月) 11:44:06.38ID:e330aYTU0
VBA全然関係無くて草

840デフォルトの名無しさん (ワッチョイ 3235-Ogwz)2017/05/08(月) 11:45:07.70ID:XvFtWWVr0
これらは外国人の環境で働いている人のいわゆる「あるある」ですね。
この前「ディズニーランドに行ってきたよ」と日本人と話すときすらいつものクセで
「ディズニーランド」の「ディ」にアクセントをつけて話す。普通の日本人は平坦か「ニー」付近にアクセントを置く。

こういう単語は探せば何十何百もすぐ挙げれそう。

841デフォルトの名無しさん (ワッチョイ 3235-Ogwz)2017/05/08(月) 11:47:04.49ID:XvFtWWVr0
>>839
じゃプログラミングに話を戻そう。
C言語とかででてくるchar型はどう発音してる?
これはcharacterの略のcharだから「キャラ」が適切だと思うけど「チャー」とか言ってる人がいる。
なにが正しいのだろう?

842デフォルトの名無しさん (ワッチョイ e2d4-Ogwz)2017/05/08(月) 11:47:07.14ID:K/3L+GRG0
>>835
アクセントの無い[i]はイとエの中間だからカナ表記ではローマ字発音に合わせるのが普通

843デフォルトの名無しさん (スプッッ Sdc7-umis)2017/05/08(月) 12:10:23.45ID:Zm2U6kRgd
>>841
charはキャラだがwcharはワチャー

844デフォルトの名無しさん (スプッッ Sdc7-umis)2017/05/08(月) 12:28:39.74ID:Zm2U6kRgd
最近Qiita記事が痛々しくね?

え、フォールズじゃないんか
スなんか

846デフォルトの名無しさん (ワッチョイ e2d4-Ogwz)2017/05/08(月) 13:44:45.32ID:K/3L+GRG0
Num LockはNumeric Lockの略だからニューメリック・ロックと呼ぶべきだが現場ではナム・ロックが多い

847デフォルトの名無しさん (ワッチョイ efd5-HG4F)2017/05/08(月) 13:47:50.49ID:KFotV+4r0
Altとかもね

848デフォルトの名無しさん (ワッチョイ 934c-HG4F)2017/05/08(月) 15:03:29.66ID:tznJkE680
読み方専用スレでも立てた方がいいくらいの勢い。

ブイビーエー

850デフォルトの名無しさん (オッペケ Srf7-15LB)2017/05/08(月) 18:16:39.65ID:qQTZnsNor
違うぞヴィービィエィだぞ

851デフォルトの名無しさん (ワッチョイ 32a6-Ogwz)2017/05/08(月) 22:29:18.14ID:iICmC17v0
xlsx
xlsm
xlsb
はなんて読めばいいの?

昔俺にLINQを教えてくれた人が
「リンキュー」って読むんだよと教えてくれて久しぶりに会って話したとき
「マジで信じてたの?」って言われたときは少し悲しかった。
もしラムダ式のことをランブダ式とか言ってれば
その時点で疑ったのに。

853デフォルトの名無しさん (ワッチョイ fe8e-mUG8)2017/05/08(月) 22:36:50.43ID:S/SP25we0
>>851
アルファベット通り。えっくすえるえすえっくす
一昔前なら2007形式とか言ってたけど、ちょっと言えなく鳴ったなぁ

854デフォルトの名無しさん (ワッチョイ 83c7-/XCo)2017/05/08(月) 22:42:47.96ID:bH63FMOe0
せっくすえすえむせっくす

855デフォルトの名無しさん (アークセー Sxf7-ENOQ)2017/05/08(月) 23:24:00.18ID:ngtCDx2wx
>>851
クルスク
クルスム
クルスブ

856デフォルトの名無しさん (ワッチョイ 32d4-Ogwz)2017/05/08(月) 23:44:05.83ID:fJ8vtBUW0
一般的には
エックスエルエスエックス
エックスエルエスエム
エックスエルエスビー
だと思うよ

857デフォルトの名無しさん (ワッチョイ 92ed-Dtwo)2017/05/09(火) 02:37:10.98ID:B9tPADXW0
英語が苦手なやつほど英語の発音にやたら拘ったりするよね
日本語で十分な言葉でもわざわざ英単語使ってみたり

そして日本で働いてるアメリカ人とかでは
英単語であっても極力日本語的な発音で話してくる人が多い
目的は会話であって英単語知識のお披露目じゃないからね
アメリカのことを米国って言うアメリカ人もいたな
まぁ日本人もアメリカ行けば日本のことをJapanと言うしね

858デフォルトの名無しさん (ワッチョイ 361f-ENOQ)2017/05/09(火) 02:44:10.70ID:y8fCKHJo0
>>841
アズナブルさんに謝れ

859デフォルトの名無しさん (ワッチョイ cf92-W+y+)2017/05/09(火) 10:08:20.11ID:bwew1y3c0
>>851
個人的にだが
エクセル ブック
エクセル マクロ
エクセル バイナリ

860デフォルトの名無しさん (ワッチョイ 3e92-W+y+)2017/05/09(火) 22:57:23.70ID:ho5latp+0
いるなあ、そおゆう枝葉末節にやたら五月蝿いひと
仕事先でもこっちがしかめっ面で格闘してる最中に話し掛けてきて
「ここの連中は発音がでたらめ云々」とか、
「関数も覚えようともしない云々」とかとか、ひつこく語りだす

ま、そおゆう人に限っていつの間にかいなくなっちゃうんだけど
「あれ?Aさんは?」
「あぁ、先月退職しました」
(へー そういやB社のBさんもC社のCさんもそのタイプだったなー
今頃どうしてるんだろ? 全然興味ないけど

861デフォルトの名無しさん (ワッチョイ 3235-Ogwz)2017/05/09(火) 23:33:41.45ID:7aZoQWqd0
>>860
× ひつこく
○ しつこく

電気は大切にね、電子。
いや、日本語は正しくね。

862デフォルトの名無しさん (オッペケ Srf7-15LB)2017/05/09(火) 23:45:06.04ID:C/VUqm3gr
>>860
マジのアスペルガーじゃないのかなそういう人って
プログラミングにのめり込んでいろいろ吸収していくって点ではPG適性ある人達
拘りが強くて人間関係はうまくいかないこと多そうだけど

863デフォルトの名無しさん (ワッチョイ 83c7-/XCo)2017/05/10(水) 00:06:45.55ID:rcR3oj9w0
興味津々の>>860ワロタw

864デフォルトの名無しさん (ワッチョイ 32a6-Ogwz)2017/05/10(水) 00:16:51.86ID:zCOat2Lr0
年収倍になってるかもしれないし

865デフォルトの名無しさん (ワッチョイ cf92-W+y+)2017/05/10(水) 10:23:34.91ID:EO8uIHSl0
教わる側がそういう態度だから教えるの嫌になるんだろうね

>>859
xlsは?

867デフォルトの名無しさん (ワッチョイ b292-FFaT)2017/05/10(水) 23:21:09.19ID:a6rY6Alm0
UserForm上のTextBoxの値を保存する方法ってある?

やり方が分からないから、閉じる時にSheetにコピーして、
開く時に、またSheetから戻してるんだけど。

だったら最初からSheet使えよって感じになっちゃってる。

>>851
エクセルエックス
エクセルエム
エクセルブ

>>808
最初、

GIF → ギフ
Yahoo! Japan → ヤッホージャパン
引数 → ひきすう

だと思ってたわ。

868デフォルトの名無しさん (ワッチョイ b2a8-HG4F)2017/05/10(水) 23:33:55.99ID:7+UXscT00
別に一時保存用だろうとなんだろうとシート使ってダメってなわけじゃないっしょ。

引数 → ひきすう

これ、それであってるでしょ

https://ja.wikipedia.org/wiki/%E5%BC%95%E6%95%B0
引数
引数(ひきすう)は 〜

さらにギフも、もともとは合ってる。

870デフォルトの名無しさん (オッペケ Sr27-Zgtb)2017/05/11(木) 07:05:21.21ID:/+7stmACr
>>867
シートを使うのが嫌なら、Thisworkbook.CustomDocumentProperties.Addメソッドでデータ保存用のドキュメントプロパティを追加して、引数ValueにTextBoxの値を設定して保存する。
個人的には非表示のシートの特定セルを名前つきセルにして値保存したりするのが一番簡単でスマートだと思うけど。

871デフォルトの名無しさん (ワッチョイ 6f8e-SU9n)2017/05/11(木) 07:43:21.95ID:rPw5k+yz0
a1:a5でa列が空白ならその行を削除ということがやりたいのですが
内部ポインタを一個戻す等、foreachで行う方法はありますか?
fornextで最終行を取得してstep-1で回すしか無いでしょうか

以下は全て空白だと、一行飛ばしになってしまいます

Sub a()
For Each c In Range("a1:a5")
If c = "" Then
Rows(c.Row & ":" & c.Row).Delete Shift:=xlUp
End If
Next
End Sub

872デフォルトの名無しさん (オッペケ Sr27-Zgtb)2017/05/11(木) 09:07:12.81ID:/+7stmACr
>>871
For Each ループの中のIfブロックを下のように変更するだけでたぶん大丈夫。

If c.Value = "" Then c.EntireRow.Delete

873デフォルトの名無しさん (ワッチョイ 4392-+8ye)2017/05/11(木) 09:29:59.01ID:FLYwB0Rv0
ピザをピッツア、ビールをビアとか言う人めんどくせ

874デフォルトの名無しさん (ワッチョイ 934c-8ulf)2017/05/11(木) 09:59:12.35ID:mcCtz2uF0
>>871
Sub test()
Dim t As Range
For Each x In Range("A1:A5")
If Len(x.Value) = 0 Then
If t Is Nothing Then
Set t = x.EntireRow
Else
Set t = Union(t, x.EntireRow)
End If
End If
Next
t.Delete
End Sub

ループ内で何らかの更新があると困る場合は、更新する処理をループ外へ持って行くのが基本。

875デフォルトの名無しさん (ワッチョイ 4392-+8ye)2017/05/11(木) 20:18:31.20ID:FLYwB0Rv0
余談だけど空白って "" 以外に " " もある気がする

876デフォルトの名無しさん (ワキゲー MM5f-cKkg)2017/05/11(木) 20:19:50.56ID:Fmy4inGeM
trimしちゃえば良いと思う

877デフォルトの名無しさん (ワッチョイ 7f35-SU9n)2017/05/11(木) 20:32:35.28ID:NW/0VvPc0
Wordスレで>>962が困っているので助けてあげていただけますか?
http://echo.2ch.net/test/read.cgi/bsoft/1385286071/

ExcelVBA使える人 → MicroSoftのOfficeの達人 → Wordも詳しい

という理屈ですが。

878デフォルトの名無しさん (エーイモ SE47-O3YC)2017/05/11(木) 23:49:17.97ID:zx/kL4SGE
本人乙

879デフォルトの名無しさん (アークセー Sx27-Zgtb)2017/05/12(金) 00:54:01.09ID:BDMuG5Bjx
>>875
If Trim(c.Value) = "" Then で解決

880デフォルトの名無しさん (ワッチョイ 4392-+8ye)2017/05/12(金) 09:35:16.74ID:gion8+MF0
ひねくれて ' を入力したのは空白になるのかな?

881デフォルトの名無しさん (スップ Sd9f-F59I)2017/05/12(金) 12:28:16.19ID:RVcJNNdKd
Q記事のメンがヘラっている

882デフォルトの名無しさん (ワッチョイ 3f61-Fc1g)2017/05/13(土) 00:59:48.33ID:mLUQCLV/0
>>880
ワークシート関数でもvbaでもlenで0が返るね
こういうときはいいけど ’ を探す時がめんどそう

883デフォルトの名無しさん (アウアウイー Sa27-CBDy)2017/05/13(土) 13:52:52.97ID:HC1vM6wca
ファイル名がセルA、内容がセルBで自動的に保存してくれるプログラムです。
2行ほどであればエラーが出ないのですが、行数が多くなると

実行時エラー'5':
プロシージャの呼び出し、または引数が不正です。

とのエラーが出て

デバッグでは「.writeline ActiveSheet.Cells(i, 2).Value」が黄色くなります。

どうすれば数百行でも自動的に保存できますか?
ちなみにBに記載する量が1万文字とか多いです。

884デフォルトの名無しさん (アウアウイー Sa27-CBDy)2017/05/13(土) 13:53:25.42ID:HC1vM6wca
Option Explicit

Sub TxtSave()
Dim FSO
Dim i As Long
Dim Shell As Object
Dim FolderPath

Set Shell = CreateObject("Shell.Application") _
.BrowseForFolder(0, "フォルダを選択してください", 0, "c:\")

If Shell Is Nothing Then
Exit Sub
Else
FolderPath = Shell.Items.Item.Path
End If

Set FSO = CreateObject("Scripting.FileSystemObject")

i = 1
While ActiveSheet.Cells(i, 1).Value <> ""
With FSO.getfolder(FolderPath).createtextfile(ActiveSheet.Cells(i, 1).Value & ".html")
.writeline ActiveSheet.Cells(i, 2).Value
End With
i = i + 1
Wend
Set FSO = Nothing
End Sub

885デフォルトの名無しさん (ワッチョイ 7f92-igRy)2017/05/13(土) 13:55:32.72ID:XIxlvzGf0
ファイルやフォルダ名の一覧生成の為に、
Dir()とかFileSystemObjectとか再帰処理とか苦労して覚えたけど、
コマンドプロンプトなら1行じゃねえかよ。
まいったねこりゃ。

>>884
デバッグ時にイミディエイトウィンドウに
?ActiveSheet.Cells(i, 2).Value
って打ってエンターすると何が出るの?

887デフォルトの名無しさん (ワッチョイ e33c-C6Hr)2017/05/13(土) 17:46:22.64ID:KbyRgcK30
コマンドプロンプトまとめたクラス作ったら便利そうだな

888デフォルトの名無しさん (ワッチョイ e33c-xhYv)2017/05/13(土) 20:16:08.98ID:7fOHZyl+0
subプロシージャで金額だけ設定して
functionで税計算して返して表示させるにはどうしたらいいですか?
なぜか0になるんですが

889デフォルトの名無しさん (ワッチョイ 6f8e-ORdk)2017/05/13(土) 20:19:17.40ID:bv0qe7/80
>>888
???

Sub a()
Debug.Print tax_include(100)
End Sub

Function tax_include(ByVal price)
tax_include = price * 1.08
End Function

890デフォルトの名無しさん (ワッチョイ 43cd-4kea)2017/05/13(土) 21:36:03.75ID:Q6aUrrnC0
>>887
可愛い子をまとめたクラス作ってほしい

891デフォルトの名無しさん (ワッチョイ 6f8e-wWCI)2017/05/13(土) 22:00:31.30ID:bv0qe7/80
・sheetは一つ
・A1を変更
・Worksheet_Changeを走らせた
この時、なぜ以下はtrueにならないんでしょうか?
Target.Range("a1") Is Cells(1, 1)

また、変更したセルがA1かどうかを判定するのってrowとcolumnを見るしか無いんでしょうか

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Range("a1") Is Cells(1, 1) Then
'以下は実行されない
Debug.Print 1
End If
End Sub

892デフォルトの名無しさん (ワッチョイ 53cd-4kea)2017/05/13(土) 22:27:03.61ID:uVoprXsD0
>>891
Private Sub Worksheet_Change(ByVal Target As Range)
  'If Target.Range("a1") Is Cells(1, 1) Then
  If Target.Range("a1") = Cells(1, 1) Then
    '以下は実行されない
    Debug.Print 1
  End If
End Sub

893デフォルトの名無しさん (ワッチョイ 6f8e-yN95)2017/05/13(土) 22:28:02.82ID:bv0qe7/80
>>892
それ評価されてるのvalueです
  If Target.Range("a1") = Cells(1, 1) Then

  If Target.Range("a1").value = Cells(1, 1).value Then

894デフォルトの名無しさん (ワッチョイ 53cd-4kea)2017/05/13(土) 22:32:39.90ID:uVoprXsD0
>>893
ほんとに分からないで聞いてるの?
If Target.Address(RowAbsolute:=False, ColumnAbsolute:=False) = "A1" Then
  MsgBox "うさぴょん"
End If

895デフォルトの名無しさん (オッペケ Sr27-Zgtb)2017/05/13(土) 22:35:22.33ID:1tdOb1fkr
>>891
Target As Rangeで、Target自体が変更されたA1セルを参照してるんだから、
Target.Range("A1")というオブジェクト式はおかしい

Target Is Cells(1, 1)
の間違いじゃないか?

896デフォルトの名無しさん (ワッチョイ 6f8e-sSiL)2017/05/13(土) 22:39:17.62ID:bv0qe7/80
>>894
質問がわかりにくくてすいません

Worksheet_Changeの中で、
Target.Range("a1") Is Cells(1, 1)
がtrueにならない理由を知りたいのです
同じobjectを指していると思うのですが、違うのでしょうか

>>895
おっしゃる通り、通常ならtarget is cells(1,1)でokと思います

ただ
・A1を変更
・Target.Range("a1") Is Cells(1, 1)
とした場合、うまく行かないのです
Target.Range("a1")
は一体何を指しているのでしょうか。A1セルではないのでしょうか

897デフォルトの名無しさん (ワッチョイ 7f3c-FKuM)2017/05/13(土) 22:45:37.20ID:RjzTmCQE0
>>891
RangeオブジェクトはなぜIs演 算子で比較できないのか
http://www.relief.jp/docs/excel-vba-is-operator-return-false-range.html

898デフォルトの名無しさん (ワッチョイ 53cd-4kea)2017/05/13(土) 22:47:47.61ID:uVoprXsD0
やはりいつもの週末の流れだった

899デフォルトの名無しさん (ワッチョイ 6f8e-ORdk)2017/05/13(土) 22:50:51.15ID:bv0qe7/80
>>897
ありがとうございます、理解できました

・Rangeオブジェクトは取得されるごとに違うメモリアドレスに格納される
さすがエクセルさん、相変わらず素敵な仕様ですね

900デフォルトの名無しさん (ワッチョイ 53cd-4kea)2017/05/13(土) 22:52:34.90ID:uVoprXsD0
結論:こと2chにおいては特に大文字小文字を区別しない奴はおかしい

901デフォルトの名無しさん (ワッチョイ cf77-4kea)2017/05/13(土) 23:07:30.19ID:N6UwL6PP0
>>900
他言語経験あるような感じにしてはそういうところいい加減なのは自演かただバカなのか
6f8eの過去レス見るとまあ両方だろうな

902デフォルトの名無しさん (ワッチョイ 6f8e-ORdk)2017/05/13(土) 23:09:56.99ID:bv0qe7/80
Worksheet_SelectionChange
をpublicにせず、privateのまま外部から呼び出す方法ってありますか?
以下はエラーになります

'sheet1
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "done"
End Sub

'標準モジュール内、module1
Sub ボタン1_Click()
Sheets(1).Worksheet_SelectionChange (Cells(1, 1))
End Sub

903デフォルトの名無しさん (アークセー Sx27-Zgtb)2017/05/13(土) 23:34:11.96ID:furRlE79x
>>902
イベントプロシージャを直接外部からCallする方法はないと思う。

やりたいことは標準モジュール内に記述した処理をイベント発生時に実行させたいということだと思うけど、
Worksheetクラスのインターフェースを継承させた自作クラスを作成して、標準モジュール内でそのクラスのインスタンスにSheet1への参照をSetして操作する作りにするか、
イベントプロシージャ側から標準モジュール内のメソッドをCallする作りにするかのどちらかだろ

904デフォルトの名無しさん (ワッチョイ 6f8e-yN95)2017/05/13(土) 23:39:39.36ID:bv0qe7/80
>>903
おー、すごい!ありがとうございます、助かりました

905デフォルトの名無しさん (アークセー Sx27-Zgtb)2017/05/13(土) 23:52:59.41ID:furRlE79x
しまった、さっきの6f8eじゃんこの人
回答しなきゃ良かった

906デフォルトの名無しさん (ワッチョイ 3f61-Fc1g)2017/05/13(土) 23:55:59.50ID:mLUQCLV/0
>>902
>>903がまっとうな回答でしょうけど呼び出せなくはない
意味あるかは別だけど

邪道な回答その1
Dim Target As Range
Run "Sheet1.Worksheet_SelectionChange", Target
※無理矢理呼び出す(オブジェクト名はデフォルトの前提)

邪道な回答その2
Worksheets("Sheet1").Range("A2").Select
※イベントが発生する操作を書けば当然呼び出せる(A2以外を選択してる前提)

907デフォルトの名無しさん (ワッチョイ 6f8e-yN95)2017/05/14(日) 00:02:12.30ID:39DrrGuD0
>>906
邪道でも良いと思います!
特に2はある意味非常にストレートで良いですね。ありがとうございました

908デフォルトの名無しさん (ワッチョイ 3fcd-4kea)2017/05/14(日) 00:06:49.87ID:QqWdjVny0
>>905
この人は分かってて質問してると思う
まぁ自分で質問して自分で回答して楽しんでるならいいけど

あとワッチョイのUA部分がころころ変わってて怪しい
http://hissi.org/read.php/tech/20170513/YnYwcWU3Lzgw.html
http://uploader.s602.xrea.com/uploader/39DrrGuD0.png

909デフォルトの名無しさん (アークセー Sx27-Zgtb)2017/05/14(日) 00:13:18.67ID:/o5arm+Xx
>>906
イベントプロシージャもリフレクションで呼び出せるんだ、知らなかったわ
ありがとう、勉強になった
6f8eのお陰なのが悔しいが笑

910884 (アウアウイー Sa27-q1AQ)2017/05/14(日) 01:43:00.95ID:2Eisyzjga
>>886
コンパイルエラー 修飾子が不正です。 とでます。

ただA列にファイル名、B列に10文字くらいの文字列を入れ20行くらいで実行したら
20個のHTMLファイルが保存されたのでプログラムは間違っていないと思います。

おそらく私がB列のセルに1万文字を超える文字列を入力しそれを400行位保存しようとしたため
エラーが出たのだと思います。

私がやりたいのは1万文字以上を超えるhtmlファイルの一部分を変数にして
その変数を変え、400ほどのHTMLファイルを特定の文字列で保存させたいのです。

プログラムは間違ってないけどエクセルの処理能力が超えてしまっている気がするのですが、
その場合どうしたらいいのでしょうか?

911デフォルトの名無しさん (ワッチョイ 3f61-Fc1g)2017/05/14(日) 02:24:51.83ID:3ZWO9+NY0
>>910
今30000文字の文字列で1000行でやってみたけどエラーにならない
俺のそんな高性能マシンてわけでもないし
たかだかそれくらいで処理能力超えないだろ

エラー出そうなことも試してみたけど「修飾子が不正です。」が出せない
質問文に書いてないとこでなんかあるんじゃないかと思うけど

912デフォルトの名無しさん (ワッチョイ 3f61-Fc1g)2017/05/14(日) 03:01:04.08ID:3ZWO9+NY0
あ、もとのエラーは「プロシージャの呼び出し、または引数が不正です。」かすまんすまん
多分環境依存文字が含まれてるんじゃね?
(財)←これを1文字で出すやつ
とかダメみたいよ
もし出力ファイルがunicodeでよければ
With FSO.getfolder(FolderPath).createtextfile(ActiveSheet.Cells(i, 1).Value & ".html", True, True)
に変更したらいける
unicodeだめなら別の方法考えないと

913910 (アウアウイー Sa27-q1AQ)2017/05/14(日) 10:06:27.52ID:2Eisyzjga
>>912
レスありがとうございます。
環境依存文字があったみたいで、取り除いたら保存できました。
とても助かりました!!

ただ不思議なのは1行ずつ手でコピペすると環境依存文字など入りません。
ただ1行目と2行目をアクティブにして右下部分を引っ張ってきて一気にコピペすると
途中までしかコピーできていなかったり、文字化けしたりしてたんです。
内容がhtmlファイルで改行コードとかタブ文字を消したり、「id="abc"」とかあるからかもしれませんが、
1行ずつのコピペは大変なのでどうしたら一気ににコピペしても1行目と2行目と同じ内容がコピーできるようになりますか?

914910 (アウアウイー Sa27-q1AQ)2017/05/14(日) 10:27:48.16ID:2Eisyzjga
例えば下記の文字列1つのセルにすべて貼り付け、1つ1つコピペすれば文字化けなどしません。
ですがセルをアクティブにして右下部分を一気に引っ張りコピーすると文字化けします。
(長すぎて書き込めなかったのですが、下記を1行にして貼り付けてください)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja"xmlns:og="http://ogp.me/ns#"xmlns:fb="http://ogp.me/ns/fb#"><head prefix="article: http://ogp.me/ns/article#">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">

>>914
とりあえず解決ならよかった
コピペでもそんな手間ではないと思うんだけどなあ
フィルの件は試してみてなんかわかったらレスするかも

関係ないけどそれ見たら出力のhtmlのcharset、utf-8じゃん
それなら今のコードだとお行儀悪いよね
FSOじゃなくてADODB.Streamとかで出力しないと
内うちで使うだけなんだったらまあいいけどさ

916914 (アウアウイー Sa27-q1AQ)2017/05/14(日) 11:40:32.05ID:2Eisyzjga
>>915
とりあえず400行ほどあるし、
その後何回も400行ほどコピペをするのはつらいです。
普通1行ずつコピペしても一気に右下を引っ張っても同じ内容になるはずなのに
引っ張るやつだけ文字化けしたりするのはエクセルのバグなんでしょうか?

あと文字コードの件も問題だったのですが、
プログラムが正常に動き、自動的に保存されることが先決だったのです。
このプログラムは同じようなことを実行したかった人がネット上にいて質問掲示板から頂きました。
(私はプログラムできません。)
なのでutf-8で出力できるように改造していただけたら嬉しいです。

917デフォルトの名無しさん (ワッチョイ e33c-rVrD)2017/05/14(日) 12:36:49.13ID:PWVYPwyE0
対象のセルに別のセルの値を挿入し、
もしセルが空白でないなら続けてvbLfを追加、もしセルが空白ならvbLfを追加しない
という操作を行いたいのですが、どうすればいいでしょうか

イメージはこんな感じです
Range(A1).Value = Range(A2).Value _
If Value <> "" Then & vbLf _
End If

918デフォルトの名無しさん (ワッチョイ 8344-irHX)2017/05/14(日) 12:45:20.20ID:ElxVcgM10
君、答え分ってて書いてるだろ 何したいんの?

919デフォルトの名無しさん (ワッチョイ e33c-rVrD)2017/05/14(日) 12:49:19.84ID:PWVYPwyE0
いや、わかってないですよ
かれこれ2時間エラー出っぱなしで泣きたいです

920デフォルトの名無しさん (ワッチョイ 6f8e-DpWa)2017/05/14(日) 12:50:07.50ID:39DrrGuD0
>>917
A1にA2、A3、A4・・・と挿入していくってこと?

Sub foo()
For i = 1 To 10
If Cells(i, 1) <> "" Then
改行 = vbLf
Else
改行 = ""
End If

buf = buf & Cells(i, 1) & 改行
Next
Cells(1, 1) = buf
End Sub

921デフォルトの名無しさん (ワッチョイ 6f8e-DpWa)2017/05/14(日) 12:50:20.10ID:39DrrGuD0
とりあえずA1-A10ね

922デフォルトの名無しさん (ワッチョイ e33c-rVrD)2017/05/14(日) 12:53:29.70ID:PWVYPwyE0
ごめんなさい、「別のセル」は別のワークシートのとびとびのセル番号になります…

923デフォルトの名無しさん (ワッチョイ 3f61-Fc1g)2017/05/14(日) 13:01:46.20ID:3ZWO9+NY0
>>916
丸投げかよと思ったけど>>1見ると最近それもありなんだな
予定ドタキャンで帰ってきたとこだから腹立ち紛れにやっちゃるわ

’宣言追加
Dim ADO As Object
Const adSaveCreateOverWrite As Long = 2’上書きモード
’Set FSOのとこ変更
Set ADO = CreateObject("ADODB.Stream")
ADO.Charset = "UTF-8"
’With FSO〜End Withのとこ変更
ADO.Open
ADO.WriteText ActiveSheet.Cells(i, 2).Value
ADO.SaveToFile FolderPath & "\" & ActiveSheet.Cells(i, 1).Value & ".html", adSaveCreateOverWrite
ADO.Close

オートフィルの件は再現できない ここに貼る前のデータに何かあるのかも
400セル選択してペーストの何がつらいかよくわからんが

924デフォルトの名無しさん (ワッチョイ e33c-rVrD)2017/05/14(日) 13:07:48.25ID:PWVYPwyE0
もしかして代入演算子の右辺にIF文は使えないんですかね
それともThenの後に&vbLfをおいても、コード内に反映されるわけではないんですかね

925デフォルトの名無しさん (ワッチョイ 53cd-4kea)2017/05/14(日) 13:10:45.32ID:OAGZutLH0
>>924
>さすがエクセルさん、相変わらず素敵な仕様ですね
とか言ってるくせにちゃんと確認しないの?

三点リーダ使うのは女かアホと相場が決まっている

926デフォルトの名無しさん (ワッチョイ 6f8e-DpWa)2017/05/14(日) 13:13:14.49ID:39DrrGuD0
>>917
Sub foo()
Set 書き出すシート = Sheets("sheet1")
Set データ持ってくるシート = Sheets("sheet2")
array_cells = Array(データ持ってくるシート.Cells(2, 2), データ持ってくるシート.Cells(3, 3), データ持ってくるシート.Cells(4, 4))
For Each i In array_cells
If i <> "" Then
改行 = vbLf
Else
改行 = ""
End If

buf = buf & i & 改行
Next
書き出すシート.Cells(1, 1) = buf
End Sub

>>924
ワークシート関数のif()とvbaは全く違う
一行ずつ処理するってことを念頭においたほうがいい

927デフォルトの名無しさん (ワッチョイ 6f8e-DpWa)2017/05/14(日) 13:14:08.59ID:39DrrGuD0
>>925
2chの書き込みから性別当てるなんて、すごーい!

928デフォルトの名無しさん (ワッチョイ e33c-rVrD)2017/05/14(日) 13:14:25.27ID:PWVYPwyE0
>>925
さすがエクセルさん云々をここで発言したことはないので、
別の方と私を勘違いしているんじゃないでしょうか

929デフォルトの名無しさん (ワッチョイ e33c-rVrD)2017/05/14(日) 13:15:34.75ID:PWVYPwyE0
>>926
すいません参考にします

930デフォルトの名無しさん (ワッチョイ 53cd-4kea)2017/05/14(日) 13:15:46.59ID:OAGZutLH0
まだ自演質問回答やってんのかよお前w

931デフォルトの名無しさん (ワッチョイ 53cd-4kea)2017/05/14(日) 13:18:21.34ID:OAGZutLH0
なんでCrLfじゃなくてLfなの?

932デフォルトの名無しさん (ワッチョイ 6f8e-DpWa)2017/05/14(日) 13:19:28.25ID:39DrrGuD0
linuxかなんかじゃないの

933デフォルトの名無しさん (ワッチョイ 53cd-4kea)2017/05/14(日) 13:25:45.62ID:OAGZutLH0
Lf環境の人がこのレベルの質問はしないと思うけど?

934デフォルトの名無しさん (ワッチョイ 6f8e-DpWa)2017/05/14(日) 13:27:39.63ID:39DrrGuD0
へぇそうなんだ

935デフォルトの名無しさん (ワッチョイ 43cd-4kea)2017/05/14(日) 13:30:14.65ID:+9EwIvKk0
ああああ月曜日が迫ってくる

セル内改行だからLFが自然でしょ

937デフォルトの名無しさん (ワッチョイ 43cd-4kea)2017/05/14(日) 13:38:02.37ID:+9EwIvKk0
>>936
素直過ぎて辛い

938デフォルトの名無しさん (ワッチョイ 6f8e-SU9n)2017/05/14(日) 14:48:19.52ID:39DrrGuD0
>>936
linuxとかアホな事言ってすいませんでした

939デフォルトの名無しさん (ワッチョイ 43cd-4kea)2017/05/14(日) 17:30:44.31ID:+9EwIvKk0
>>936
生まれてきてごめんなさい

ネタにマジレスごめんなさい許してください

linux版Excelとか胸熱だな

941デフォルトの名無しさん (ワッチョイ 6fc8-vcg+)2017/05/14(日) 23:18:59.05ID:4EM+3hXS0
セル内はLF改行なの知らない奴が居るんだな。
ちょっとびっくり。

942デフォルトの名無しさん (ワッチョイ 0fcd-4kea)2017/05/15(月) 07:15:58.15ID:YL7X9+9D0
>>941
CRLFでもOKだよ

943デフォルトの名無しさん (ワッチョイ d30a-8Y85)2017/05/15(月) 08:51:02.82ID:8OsvPK0Q0
使い分ける意味がないのでcrlfで統一してる。

944デフォルトの名無しさん (ワッチョイ 6f8e-wWCI)2017/05/15(月) 08:53:52.17ID:RuVqP/Xq0
>>942>>943
セル内改行をcrlfにすると、crの分一文字多くなり、ミスに繋がりかねない
こういうのはちゃんと使い分けておいたほうが良い

どっちでもいいんだけど手入力のはLFだから混ざると嫌だな

946デフォルトの名無しさん (ワッチョイ c3d5-8ulf)2017/05/15(月) 10:04:23.87ID:au67XF4l0
すいません、教えてください。

5秒おきに更新されるデータシート(5万行ぐらい)をアクティブにするとCPUの使用率が高くなってしまいます。
普段はチャートのあるシートをアクティブにしていて問題はないのですが、
たまに生データを確認したいときがあり、データシートをアクティブにするとファン回転数が上がりPCが苦しそうなのでなんとかしたいです。

データシートには数式はありませんし、Changeイベントなどで動くマクロもありません。
5秒間隔で更新されるのは最下行のデータのみです。

数万行程度のシートをアクティブにしただけでこんなに負荷が上がってしまうものなのでしょうか?
データシートの行数を減らせば負荷が軽くなることは確認済みですが、
過去のデータを見たいときも頻繁にあるので、それ以外の方法で改善する方法がありましたら教えていただきたいのです。

宜しくお願いします。

http://i.imgur.com/0r3c5DZ.jpg

947デフォルトの名無しさん (ワッチョイ c3d5-8ulf)2017/05/15(月) 10:08:29.62ID:au67XF4l0
>>946
書き忘れましたが、Win7 + EXCEL2010、CPUはi5とかいうやつでメモリは16Gです。

948デフォルトの名無しさん (ワッチョイ 6f92-+8ye)2017/05/15(月) 11:24:53.31ID:Z59X/zup0
質問の中に答えはあるけど、その数万行のシートをダイレクトに見に行く
んじゃなくて、何らかの抽出、絞り込み結果のシートを設けてそれを見れば

949デフォルトの名無しさん (ワッチョイ 7fa8-8ulf)2017/05/15(月) 14:51:53.33ID:BtHIySOa0
そういうのは、何が何でもExcelじゃなくそろそろRDBを検討すべき段階に来てるんじゃ

950916 (イルクン MM5f-CBDy)2017/05/15(月) 14:57:24.84ID:alpqg8q8M
>>923
私なんかのために貴重な時間を割いてくださり、大変感謝しております。
ありがとうございます。
無事にやりたいことが実現できました。
とても助かりました。

実は私には不思議なパワーがありまして
あなた様が1年以内にとても良いことが起こるよう祈らせていただきました。
あなた様のさらなる幸せを祈っております。

951デフォルトの名無しさん (ワッチョイ d30a-8Y85)2017/05/15(月) 16:04:38.55ID:8OsvPK0Q0
>>950
感謝してるのはわかるが、やりすぎ気味w

952デフォルトの名無しさん (JP 0Hff-+8ye)2017/05/15(月) 16:16:41.59ID:Jjv98UEoH
>>946
その「5秒おきに更新」する処理が重いのでは?

953デフォルトの名無しさん (ワッチョイ c392-SU9n)2017/05/15(月) 16:49:14.68ID:hqrIAl2v0
共有してるとか?

954デフォルトの名無しさん (ワッチョイ c3d5-8ulf)2017/05/15(月) 16:59:07.80ID:au67XF4l0
>>948
生データを確認したい時は直近データを見たいときが殆どなので
直近データをコピペしてその貼り付け先シートでデータ確認するのがよさそうですね。
>>949
そのほうがいいのかもしれませんがエクセルしか知らない自分にはハードルが高いんですよね。
DBへ切り替える方法を簡単に解説してるサイトとか、これでググれみたいなワードがありましたら教えてください。
>>952
5秒間隔での更新は確かに重いですが、
>>946の画像のように、
データシートをアクティブにしたときと他のシートをアクティブにしたときのCPU使用率の差が大きいのが納得いかないのです。
大量のシートをアクティブにするだけで、なんでこんなにCPUが一生懸命動くのかと・・・
>>953
共有はしていません。

955デフォルトの名無しさん (ワッチョイ c3d5-8ulf)2017/05/15(月) 17:00:47.72ID:au67XF4l0
>>954、訂正

>大量のシートをアクティブにするだけで

>大量のデータがあるシートをアクティブにするだけで

956デフォルトの名無しさん (JP 0Hff-+8ye)2017/05/15(月) 17:10:44.64ID:Jjv98UEoH
>>954
マクロも計算式も一切ないのならデータの更新も行われないわけで、なんらかの処理が5秒おきに
実行されてるということですよね?

それがマクロ(VBA)で、なおかつ画面の再描画が実行されるなら、
・処理の前にapplication.screenupdating = false
・最後にapplication.screenupdating = true
を追加すると、動作が軽くなる可能性があります。

要は、画面の再描画が重いのでは?という疑惑です。

957デフォルトの名無しさん (ワッチョイ 8344-irHX)2017/05/15(月) 17:11:46.80ID:iRZDwBv50
excelの中の人じゃないから 違ってるかもだけど

5秒おきに更新
非アクティブ : データの書き換え
アクティブ: データの書き換え + 画面更新
かと

VBAやってる人なら
Application.ScreenUpdating = fasle
とかは 高速化の定番よ

958デフォルトの名無しさん (ワッチョイ 8344-irHX)2017/05/15(月) 17:12:46.90ID:iRZDwBv50
あらかぶった

959デフォルトの名無しさん (JP 0Hff-+8ye)2017/05/15(月) 17:13:17.26ID:Jjv98UEoH
もう一つ怪しいのは、シートの再計算です。
https://www.moug.net/tech/exvba/0040055.html

960デフォルトの名無しさん (ワッチョイ c3d5-8ulf)2017/05/15(月) 17:16:32.27ID:au67XF4l0
>>956
あ、ごめんなさい。>>946の「Changeイベントなどで動くマクロもありません」というのは、
データシートをアクティブにしたりデータシートのセルの内容を書き換えたりといったイベントで動くマクロはないという意味です。
application.screenupdatingですか。まさかそんな初歩的なミスは犯していないはず・・・今から確認してみます・・・

961デフォルトの名無しさん (ワッチョイ c3d5-8ulf)2017/05/15(月) 17:24:05.50ID:au67XF4l0
>>956>>957
screenupdatingについては問題ありませんでした。
データシートに数式はありません(ないはず)。
データシートには条件付き書式はありません(ないはず)。

962デフォルトの名無しさん (JP 0Hff-+8ye)2017/05/15(月) 18:03:55.68ID:Jjv98UEoH
横10個×5万行のデータをセットして、5万行目を書き換えるマクロを実行してみたけど、特に目立った
スパイクはなかったよ。CPU使用率は0.x%とか。
単にデータの多いシートにデータをセットするくらいでは、CPU使用率は上がらないってことかな。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub hoge()
  Set r = Worksheets("Sheet1").Range("A50000")

  For i = 1 To 10
    For j = 0 To 100
      r.Offset(0, j / 10) = j
    Next
    Sleep 1000
  Next
End Sub

963デフォルトの名無しさん (ワッチョイ 6fc8-vcg+)2017/05/15(月) 18:04:22.40ID:D8tuQ7tG0
>>961
無いはずじゃなくてちゃんと調べないとダメでしょ。
調べる関数とかあった筈。

964デフォルトの名無しさん (ワッチョイ 53c7-fj9k)2017/05/15(月) 21:28:43.47ID:Nl227Lk00
>>963の渾身のボケをスルーとかお前らちょっと冷たすぎるんやないか?

データシートを更新してるルーチンが怪しいんじゃないのかなあ

966デフォルトの名無しさん (ワッチョイ c3d5-8ulf)2017/05/15(月) 22:03:34.78ID:au67XF4l0
>>963
そうなんですが今も稼働中なのでチェックできないんです、すいません。
チェックできるのは土日になってしまいそうです。
>>965
データシートを更新しているマクロは、
データシートがアクティブでもその他のシートがアクティブでも、その実行速度に差はないと思うんですがどうなんでしょう?

967デフォルトの名無しさん (ワッチョイ 0fcd-4kea)2017/05/15(月) 22:04:41.72ID:YL7X9+9D0
ほんとにexcel.exeのCPU使用率なの?

968デフォルトの名無しさん (ワッチョイ 0fcd-4kea)2017/05/15(月) 22:06:08.32ID:YL7X9+9D0
>screenupdatingについては問題ありませんでした。
あとこの問題なかったかどうかの判断はこちらでするのでSS見せて

っていってSS見ると実は間違っているということが稀によくある

969デフォルトの名無しさん (ワッチョイ 6fcd-4kea)2017/05/15(月) 22:26:31.63ID:ypGkRsf80
勘で言うとExcelオプションのハードウェア グラフィック アクセラレータを無効にするにチェック入れて再起動

あとはなんだろうprocess monitorでexcel.exeが何してるか調べるとか

970デフォルトの名無しさん (ワッチョイ c3d5-8ulf)2017/05/15(月) 22:30:26.33ID:au67XF4l0
>>967
データシート以外がアクティブのときはエクセルのCPU使用率はせいぜい12%ぐらいなんですが、
データシートをアクティブにすると、画像のようにエクセルのCPUが大きく上がるのです
http://i.imgur.com/XROLZng.jpg

971デフォルトの名無しさん (ワッチョイ c3d5-8ulf)2017/05/15(月) 22:32:46.70ID:au67XF4l0
>>969
それなりに長いマクロなのでSSで示すのは難しいですが、
マクロの最初にFalseにして最後にTrueに戻してるだけです。
間違っている例ってどんなのがありますか?

972デフォルトの名無しさん (ワッチョイ c3d5-8ulf)2017/05/15(月) 22:33:59.03ID:au67XF4l0
>>971>>968へのレスです

973デフォルトの名無しさん (ワッチョイ 6fcd-4kea)2017/05/15(月) 22:34:37.51ID:ypGkRsf80
>>971
その前にさ、i5なのになんでタスクマネージャのコア1個なの?
仮想マシンとかじゃないよね?

974デフォルトの名無しさん (ワッチョイ c3d5-8ulf)2017/05/15(月) 22:42:31.32ID:au67XF4l0
>>973
タスクマネージャーのコアが1個ってなんですか?
詳しくないんですが、他OSからWindowsを起動して、そこでエクセルを起動してるとかはしてないです。
ハードディスクにはOSはWin7しかインストールしていません。

975デフォルトの名無しさん (ワッチョイ 6fcd-4kea)2017/05/15(月) 22:44:32.91ID:ypGkRsf80
あと最小化しててもCPU喰うの?

976デフォルトの名無しさん (ワッチョイ c3d5-8ulf)2017/05/15(月) 22:45:11.31ID:au67XF4l0
>>969
明日の朝にやってみます。ありがとうございます。
>Excelオプションのハードウェア グラフィック アクセラレータを無効にする

>process monitorでexcel.exeが何してるか調べるとか

難しくてよくわからないんでググってみます。

977デフォルトの名無しさん (ワッチョイ cfe2-SU9n)2017/05/15(月) 22:48:12.52ID:HjU+oVHK0
更新のためにデータシートの一番下以外の部分も参照してる?
あと一番下以外も変化がないだけで更新してるとかは?

978デフォルトの名無しさん (ワッチョイ 6fcd-4kea)2017/05/15(月) 22:51:33.73ID:ypGkRsf80
再計算の発生とかレンダリングも発生してる気がする

IEのCPU使用率やGOM起動中とか、さっきのCPUコア数の件とか
なんか怪しい点が多い

979デフォルトの名無しさん (ワッチョイ c3d5-8ulf)2017/05/15(月) 22:54:14.32ID:au67XF4l0
>>975
今試してみたら、最小化したらCPU使用率は上がりませんでした。

>>977
5秒間隔で、データシート最下行のデータを更新する or データシート最下行のひとつ下の行にデータを追加する、ということをやっています。
で、最下行のデータを更新するにも、最下行のひとつ下の行にデータを追加するにも、直近9行のデータを使っています。
つまり、一番下以外の部分も参照しています。

980デフォルトの名無しさん (ワッチョイ 6fcd-4kea)2017/05/15(月) 22:58:05.18ID:ypGkRsf80
>>979
あとはあれだ、描画停止だけじゃなくてこれ
Application.Cursor = xlWait
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
' この間に自分で書いたコード
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.Cursor = xlDefault

981デフォルトの名無しさん (ワッチョイ 6fcd-4kea)2017/05/15(月) 23:00:49.81ID:ypGkRsf80
>それなりに長いマクロ
とか書いてあるからSelectしてたり何かここに書かれていない重い原因があるんだろうよ
特定されそうな文字列は伏せてうpできねーの

それか、何をどう処理してるか具体的に書こうぜ

982デフォルトの名無しさん (オッペケ Sr27-Zgtb)2017/05/15(月) 23:04:45.28ID:KP72bivDr
やっぱり特殊な仕方でセルへのアクセスをしてるんじゃん

983デフォルトの名無しさん (オッペケ Sr27-Zgtb)2017/05/15(月) 23:17:13.55ID:KP72bivDr
そもそも行数はさておきフィールド数いくつあるのよ
200バイトくらいの文字列を突っ込んだセルが数十列あったりとかじゃないよな

984デフォルトの名無しさん (ワッチョイ c3d5-8ulf)2017/05/15(月) 23:19:18.33ID:au67XF4l0
>>978
IEを起動してなくても、GOMを起動していなくても、データシートをアクティブにするとエクセルのCPU使用率は高くなります。
IEとGOMを閉じてデータシートをアクティブにしたときのCPU使用率です。
http://i.imgur.com/GMyaE03.jpg
>>981
楽天RSSというものを使用して、日経先物の買い注文や売り注文の変化を5秒間隔で集計しグラフ化しています。

マクロ高速化に関するページは一通り目を通しています。
Selectの多用など初歩的なミスはないと思います。

>>982
特殊な仕方でのセルへのアクセスとはどういったものなのでしょうか?

985デフォルトの名無しさん (ワッチョイ c3d5-8ulf)2017/05/15(月) 23:21:10.98ID:au67XF4l0
>>983
列数は26列です。
最初の1列は日付、それ以外の25列は数値です。

986デフォルトの名無しさん (ワッチョイ 6fcd-4kea)2017/05/15(月) 23:22:29.80ID:ypGkRsf80
自己判断ばかりで情報出さないと俺はもうパスだわ
がんばれなー

987デフォルトの名無しさん (ワッチョイ c3d5-8ulf)2017/05/15(月) 23:27:01.14ID:au67XF4l0
>>986
えー、情報出してませんか?残念です。でもいろいろレスありがとうございました。

988デフォルトの名無しさん (オッペケ Sr27-Zgtb)2017/05/15(月) 23:27:32.77ID:KP72bivDr
>>985
その数値何桁あるんですか
あと、書式設定はどうなってます?

989デフォルトの名無しさん (ワッチョイ 6fcd-4kea)2017/05/15(月) 23:30:12.17ID:ypGkRsf80
>>987
つか楽天RSSのせいじゃねーの?

990デフォルトの名無しさん (ワッチョイ 6fcd-4kea)2017/05/15(月) 23:33:08.29ID:ypGkRsf80
楽天RSSスレがあるぽいからそっちで聞いた方がいいと思うよ
長引いてて他の人が質問しづらいだろうし

991デフォルトの名無しさん (オッペケ Sr27-Zgtb)2017/05/15(月) 23:34:38.44ID:KP72bivDr
てか、ググってみたら楽天RSSってエクセルアドインツールじゃん
そんなもん、ユーザーのカスタムコードだけ調べても原因なんか分からんだろw

992デフォルトの名無しさん (ワッチョイ 6fcd-4kea)2017/05/15(月) 23:36:18.68ID:ypGkRsf80
おじさん(´・ω・`)ガッカリだよ

993デフォルトの名無しさん (オッペケ Sr27-Zgtb)2017/05/15(月) 23:37:21.71ID:KP72bivDr
しかも数式の自動計算オプションをオンにしないと使えないみたいじゃん

994デフォルトの名無しさん (ワッチョイ c3d5-8ulf)2017/05/15(月) 23:38:35.98ID:au67XF4l0
>>988
http://i.imgur.com/jG68gse.jpg
こんな感じです。
1列目以外の書式は標準です。
>>989>>990
楽天RSSのせいだとしても、
アクティブのシートによってCPU使用率にここまで差があるというのが納得できないんですよね。

でも仰るように、長引いてて迷惑かもしれないんで、少々控えます。

995デフォルトの名無しさん (ワッチョイ 7fcd-4kea)2017/05/16(火) 00:38:16.66ID:o7mBy2CV0
>>994
>納得できないんですよね。
だから判断するのは質問者の手前じゃねえっつってんだろ

分かってないくせになんで納得できないんだよ
アクティブシートによって楽天RSSが負荷をかける仕様なだけだろ

すっとぼけてるだけで実は仮想マシンで色々動かしてるんだろ?
マネーゲームしてる典型的なカスの態度そのまんまだぜ

996デフォルトの名無しさん (ワッチョイ c3d5-8ulf)2017/05/16(火) 01:00:20.15ID:H5+sVhHM0
>>995
アクティブシートによって負荷がかかる仕様ってことがあるのか、なるほど。

>すっとぼけてるだけで実は仮想マシンで色々動かしてるんだろ?
なぜそう思うのか?そんな知識は持ち合わせていない。

>マネーゲームしてる典型的なカスの態度そのまんまだぜ
すごい偏見
頭悪そうだねw

997デフォルトの名無しさん (ワッチョイ 7fcd-4kea)2017/05/16(火) 01:02:10.42ID:o7mBy2CV0
>>996
じゃあな、いい夢見ろよ

998デフォルトの名無しさん (スップ Sd9f-F59I)2017/05/16(火) 08:24:25.65ID:J7MMoyEGd
ScreenUpdating = False しない派いる?

999デフォルトの名無しさん (ワッチョイ 6f8e-SU9n)2017/05/16(火) 08:25:04.88ID:iIGA/64l0


Excel VBA 質問スレ Part48 [無断転載禁止]?2ch.net
https://echo.2ch.net/test/read.cgi/tech/1494890685/l50

1000デフォルトの名無しさん (ワッチョイ 6f8e-SU9n)2017/05/16(火) 08:25:24.77ID:iIGA/64l0
>>998
めんどくさいときはしない
けど基本するかなぁ

10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 61日 17時間 20分 51秒

10021002Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.2ch.net/

▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php

レス数が1000を超えています。これ以上書き込みはできません。