VBAなんでも質問スレ
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2012/07/12(木) 19:03:00.57VBAを使った質問ならなんでもござれ
本来の対象であるオフィスアプリを操作する以外の話もOK
ゲーム作り、Webアクセス、外部アプリの操作
COM(ActiveX)、Win32API、.NET Framework、DirectXなどなど
VBAで実行するものであればなんでも質問してください
VBAを開発環境としていろいろ作っちゃいましょう
関連スレ
Excel VBA 質問スレ Part25
http://toro.2ch.net/test/read.cgi/tech/1341722983/
Access VBA 質問スレ Part1
http://toro.2ch.net/test/read.cgi/tech/1328536426/
VBプログラマ質問スレ(Ver.6.0 まで) part58
http://toro.2ch.net/test/read.cgi/tech/1328782534/
0002デフォルトの名無しさん
2012/07/12(木) 19:22:31.850003デフォルトの名無しさん
2012/07/12(木) 19:23:33.44入力されたテキストからQRコードを作って、
正方形に配置したセルを白黒に塗り分ければ良いと思うのですが、
具体的にどこから手をつければ良いのかわかりません。
0004デフォルトの名無しさん
2012/07/12(木) 19:24:18.17操作したいie画面は左右にフレームが分割されているもので、左側に
メニューが並んでおり、そのメニューをクリックすると、右フレームに
そのメニューに応じた画面が表示されるというものです。
ie画面操作を自動化したいのですが、このメニュー選択の部分が突破
できずにいます。左フレームのソースのリンク先を使って、以下の
マクロを書いたのですが
Dim objShell As Object
Dim IEurl As String
Set objShell = CreateObject("WScript.Shell")
IEurl = "http://********************"
objShell.Run IEurl
このマクロでは、右フレーム上に画面を開くことができずに
「不正な画面遷移が検出されました」と分割フレームが消えて
全面に表示されてしまいます。
尚、クッキーを引継ぐ必要があるので、WScript.Shellを使っています。
objShell.Run IEurl の部分でカレントフレームを指定するなどが
できないでしょうか?Runの前(又は後)に「.〜」と何か挿入するとか・・。
frame(0)などを入れてもうまく行きません。
どなたかie画面操作に詳しい方、レスお願い致します。
0005デフォルトの名無しさん
2012/07/12(木) 19:25:59.48|_::;; ~"'ヽ
| //^''ヽ,,)
| i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
_,,,......,,__
/_~ ,,...:::_::;; ~"'ヽ
(,, '"ヾヽ i|i //^''ヽ,,)
^ :'⌒i i⌒"
|( ´∀`) < きのこ のこーのこ げんきのこ ♪
|(ノ |つ
| |
⊂ _ ノ
""U
_,,,......,,__
/_~ ,,...:::_::;; ~"'ヽ
(,, '"ヾヽ i|i //^''ヽ,,)
^ :'⌒i i⌒"
(´∀` )| < エリンギ まいたけ ブナシメジ ♪
⊂| (ノ |
| |
ヽ _ ⊃
.U""
|
| ミ
| ミ サッ!
| ミ
|
0006デフォルトの名無しさん
2012/07/12(木) 19:27:00.23言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0007デフォルトの名無しさん
2012/07/12(木) 23:29:29.48.midファイルを再生するのではなく、シート上に
ド|■■■
レ| ■■
ミ.| ■■■■
のように表記したものを演奏したいのです。
Beepで音階を表現する方法くらいはわかるのですが
実際は和音もあるのでBeepではできません。
あと、ピアノとかフルートなどの音色も変更できるようにしたいです。
宜しくお願いします。
0008デフォルトの名無しさん
2012/07/13(金) 00:01:34.63シートってことはExcelか?
00097
2012/07/13(金) 00:31:13.62使ってるのはExcel2002です。
ただ実質的には二次元配列データからmidi再生ってことなので
Excelはあまり関係ないかも知れませんが。
0010デフォルトの名無しさん
2012/07/13(金) 00:35:24.18Excel VBA 質問スレ Part25
http://toro.2ch.net/test/read.cgi/tech/1341722983/
こっちに来いってさ
こっちの>>1には何がスレ違いだのなんだの書かれてるけど
その質問もスレ違いじゃなくてちゃんと答えてくれるっていう人がいるから
行ってみたら?
0011デフォルトの名無しさん
2012/07/13(金) 00:44:19.74「vba 音を鳴らす 音階 音色 -beep」でググれ
00127
2012/07/13(金) 00:44:38.860013デフォルトの名無しさん
2012/07/14(土) 12:42:44.16URI/タイトル:含む:VBA
Word:正規(含む):(正義|謝罪|謝れ|オナニー|早漏)
0014デフォルトの名無しさん
2012/07/22(日) 03:34:14.70って
「スレ立てるまでもない質問はここで 120匹目」
に投稿したらここを紹介された。
ここでおk?
0015デフォルトの名無しさん
2012/07/22(日) 09:11:12.16答えてくれる奴、答えられる奴が居るかまでは保証しないが
0016デフォルトの名無しさん
2012/07/22(日) 11:46:13.23このスレが立った経緯を考えると
誰も答えてくれないと思うよ^^
0017デフォルトの名無しさん
2012/07/23(月) 00:03:19.90VBAと言えばMS Officeだし、お絵かきソフトならアドビ一択だろ
0018デフォルトの名無しさん
2012/07/23(月) 08:42:31.1714が書いてみないことには何ともだけど
0019デフォルトの名無しさん
2012/07/23(月) 13:57:09.79つかさっさと質問書けばいいのに
0020死ね
2012/07/24(火) 07:52:56.79あ?なにお前、質問書いてほしいのなら書いてくださいとお願いしろや
0021デフォルトの名無しさん
2012/07/24(火) 13:05:51.79002214
2012/07/26(木) 00:27:11.99読めもしない英語のチュートリアルを辞書片手に読んでいました。
200近いオブジェクトのうちの、いくつかのオブジェクトの内側の色を、
CMYKで指定する値に変えるというマクロを組みたいのです。
が、それ以前に指定するオブジェクトを選択できないので困っています。
それで今のところ、単純に任意のオブジェクトを選択するだけのマクロを組みたいのですが
以下のコードから If文のところをどういう風に組めばいいのかが分かりません。
ご教授願えませんでしょうか?
Sub オブジェクトを選択する()
dim sh1 as shape
'選択している全てのオブジェクトを検索
For Each sh1 In ActiveSelection.Shapes
'下の*に適合したら選択する
if ************* Then
sh1.CreateSelection
msgbox "指定されるオブジェクトを選択できました。"
Exit For
End If
Next sh1
End Sub
0023デフォルトの名無しさん
2012/07/26(木) 10:29:19.71エスパーさ〜〜ん、ご指名ですよ〜〜〜〜〜
0024デフォルトの名無しさん
2012/07/26(木) 10:38:28.390025デフォルトの名無しさん
2012/07/26(木) 10:44:55.050026デフォルトの名無しさん
2012/07/26(木) 10:50:33.68> いくつかのオブジェクト
> 指定するオブジェクト
> 任意のオブジェクト
が何を指しているのか書かないと始まらないのでは?
丸いものだけとか、何色のものだけとかさ。
というか、人間相手に自然言語でそういうことを理路整然と語れない奴には
プログラムやマクロは無理じゃないか?
英語とかVBA語とか、言語の種類を増やす前に、まず小学校で
生活言語(母語)での基礎的な表現や会話能力を身につけた方がいいかもしれない。
0027デフォルトの名無しさん
2012/07/26(木) 12:58:03.36住み分けが機能してるようだ
後は分断工作員さんが回答できるだけの知識をつけるだけだな
0028デフォルトの名無しさん
2012/07/26(木) 14:03:28.28こっちは元々回答者居ないでしょ
住み分け派:ExcelVBAスレで順調に回答、向こうでスレ違いになるこっちの質問には興味なし
なんでも来い派:こっちは勝手に立てられたスレだから興味なし
0029デフォルトの名無しさん
2012/07/26(木) 15:29:48.330030デフォルトの名無しさん
2012/07/26(木) 22:40:19.680031デフォルトの名無しさん
2012/07/26(木) 22:45:03.86君の行っている大学には質問できる教員はいないの?
それとも君が教員で課題を考える側?
0032デフォルトの名無しさん
2012/07/26(木) 22:49:22.77課題だから自分で調べてやりなさいとのことなんですが、そもそも文章の意味すら理解できなくて…
0033デフォルトの名無しさん
2012/07/26(木) 23:18:08.48単位が取れないとか言うかも知れないが、単位を取ることは仕事と違って義務じゃないんだし
他人の力で単位取る事の方がよほど恥ずべき行為
子供のうちから、中身もないのに表面だけ取り繕うこと考えてるとロクな大人にならないぞ
そもそも全員が難なくこなせる内容だったら、課題の意味が無い
出来ない人、間違う人を見極めながら講義を進めていくわけだから、出来ない人が居ても何も問題わけで
その上で「出来ない人」に分類されるのが嫌ならば、他人を当てにするのではなく自分を磨け
0034デフォルトの名無しさん
2012/07/26(木) 23:24:08.960035デフォルトの名無しさん
2012/07/26(木) 23:34:16.720036デフォルトの名無しさん
2012/07/26(木) 23:39:52.65簡単な質問なら答えるべきではないものでも嬉々として答える人が居るから
試しに質問書いてみたら?
0037デフォルトの名無しさん
2012/07/26(木) 23:53:28.09という課題なのですが、この初期値として推移を計算するっていうところがわかんなくて困ってます
0038デフォルトの名無しさん
2012/07/27(金) 03:09:58.57ブックの参照設定を開いた時に自動で変えることは可能でしょうか?
0039デフォルトの名無しさん
2012/07/27(金) 05:26:07.28Excelの問題というよりも統計の問題ですよ、それ w
forecastとか回帰直線とか、そういったのを調べてみたら?
0040デフォルトの名無しさん
2012/07/28(土) 10:38:07.28質問 最近 Windows 7/Outlook2010 に移って、今までXP/Outlook 2007のでVP
スクリプトから実行してたエラーが出てスクリプトが動きません。テストコー
ドを書いても同じ結果です。
エラー
Object doesn't support this property or method
VBA コード
Public Sub test_msgbox(str As String)
MsgBox str
End Sub
VBS コード
Set myOlApp = CreateObject("Outlook.Application")
myOlApp.test_msgbox("test")
何がおかしいのでしょうか?
0041デフォルトの名無しさん
2012/07/28(土) 10:41:33.240042デフォルトの名無しさん
2012/07/28(土) 12:03:16.34コードは1行だけ
0043デフォルトの名無しさん
2012/07/28(土) 12:42:33.54というか、こりゃスクリプトの質問だからさすがにスレ違いだな
"VP"スクリプトではなくVBスクリプトだとしてもねw
0044デフォルトの名無しさん
2012/07/28(土) 22:35:18.85書く癖を付けろ
004540
2012/07/29(日) 03:36:04.31サンクス
>>43
どうしてエラーがでるか教えてください。ちなみに前の環境ではこのエラーは
でません。
追加情報ですが、VBA 側のコードは、"ThisOutlookSession" に書いてありま
す。ウェブでこのエラーで検索すると"Digital Signatureがないとだめ"的な
ことが書いてあったのでSignatureを登録しましたが結果は変りませんでした。
VBスクリプト側にも署名が必要なのかとなと考えてますがその方法が別りませ
ん。
0046デフォルトの名無しさん
2012/07/29(日) 14:44:54.50俺が以前作ったエクセルから音を出す装置だぜ〜
apiのPlaySoundを使った場合
http://xlsg.net/cgi-bin/updown2/updown2.cgi?mode=download&id=439
dx8の場合
http://xlsg.net/cgi-bin/updown2/updown2.cgi?mode=download&id=438
これはmidiデパイスから音を出してるピンボールだぜ(諸事情でコードは見れないぜ)
http://xlsg.net/cgi-bin/updown2/updown2.cgi?mode=download&id=339
0047デフォルトの名無しさん
2012/07/29(日) 15:28:15.90VBAプロジェクトの保護ってのは、誤改変防止であってソース漏洩防止じゃないから
0048デフォルトの名無しさん
2012/08/17(金) 15:40:09.16地心黄経で出したいのですが、参考になるHPがあれば教えてください。
0049デフォルトの名無しさん
2012/08/17(金) 19:03:31.48http://msdn.microsoft.com/ja-jp/library/
0050デフォルトの名無しさん
2012/08/29(水) 05:52:09.700051デフォルトの名無しさん
2012/08/29(水) 07:07:14.33もちろん可能ですよ
WAVファイルを読み込んで、WAV→MP3に変換して、MP3ファイルを保存するだけです
WAVやMP3の仕様を入手できればそれほど難しくはありません
0052デフォルトの名無しさん
2012/08/29(水) 09:04:19.890053デフォルトの名無しさん
2012/08/29(水) 15:27:24.120054デフォルトの名無しさん
2012/08/29(水) 16:00:34.47日本の不幸は中国と朝鮮だ。
この二国の人々も日本人と同じく漢字文化圏に属し、同じ古典を共有しているが、
もともと人種的に異なるのか、教育に差があるのか、 日本との精神的隔たりはあまりにも大きい。
地球規模で情報が行き来する時代にあって、近代文明や国際法について知りながら、
過去に拘り続ける中国・朝鮮の精神は千年前と違わない。
国際的な紛争の場面でも「悪いのはお前の方だ」と開き直って恥じることもない。
もはや、この二国が国際的な常識を身につけることを期待してはならない。
「東アジア共同体」の一員として その繁栄に与ってくれるなどという幻想は捨てるべきである。
日本は、大陸や半島との関係を絶ち、 欧米と共に進まなければならない。
ただ隣国だからという理由だけで特別な感情を持って接してはならない。
この二国に対しても、国際的な常識に従い、国際法に則って接すればよい。
悪友の悪事を見逃す者は、共に悪名を逃れ得ない。
私は気持ちにおいては「東アジア」の悪友と絶交するものである。
_,,,,,,__ __,,,__
ィjj)))))))))!!!!!彡ヽ,
/ミ/ ,}彡ヘ
|ミ{ -‐ ‐ ‐ ‐- {三=|
El==; ゚ ''==. |ミミ,|
`レfォ、,〉 :rfォ.、, !iル┤
. { `¨ i ・、¨ ´ `{ゞ'} 支那、朝鮮とは
. | '`!!^'ヽ .「´ 付き合うなと忠告しておいたのに。。。
! ,-ニ'¬-、 ,!|,_
. \´?` / ∧ヘ、
__/〉`ー ' ´ / 〉 \
_, ィ´「∧ / / 」¬ー- 、_
-‐ ´ / / ヽ、/ / iヾ ヽ
0055デフォルトの名無しさん
2012/08/31(金) 06:14:33.680056デフォルトの名無しさん
2012/08/31(金) 06:54:07.85この手の書き込みは、何の脈絡も無く書かれるから誤爆(投稿スレ間違い)っぽくも見えるが
自己主張を拡散するために脈絡のないスレであっても意図的に投稿しているので
誤爆、誤投稿の類ではない
やってる本人は、自己の主張の正しさを拡散しようとしてるのだろうけど
こういうマナー違反な荒らし宣伝的な投稿を繰り返せば
主張の内容は拡散されても、その主張は荒らしを繰り返すような
キチガイの主張としてしか認識されなくなって逆効果なんだけど、たぶんバカだからそこを解ってない
0057デフォルトの名無しさん
2012/08/31(金) 12:26:50.43エンコードに必須な複数の技術に特許かかってるから無理っぽいぜ
0058デフォルトの名無しさん
2012/09/01(土) 17:56:29.753は無理ゲー
0059デフォルトの名無しさん
2012/09/14(金) 07:38:02.710060デフォルトの名無しさん
2012/09/18(火) 17:48:54.06excel2010
memory 8G うち使ってんのは1.8Gくらい?(タスクマネージャーで)
cpu i5
漠然とした質問になってしまいますが、Excelが応答なしになるのを回避出来る手段は
DoEvents以外にどのようのものがあります?
今作ってんのがやたらに応答なしになってしまうもんで^^;
0061デフォルトの名無しさん
2012/09/18(火) 17:53:44.400062デフォルトの名無しさん
2012/09/18(火) 17:57:40.25応答なしになるミニマムコードを晒してみ
0063デフォルトの名無しさん
2012/09/18(火) 18:15:21.46なぜ応答なしになるのかわからないけど、それを避けたいのか
0064デフォルトの名無しさん
2012/09/18(火) 18:29:14.33セルを頻繁に書き換えるようなコードの場合は再計算、再描画を止める
0065デフォルトの名無しさん
2012/09/18(火) 19:05:10.60…確かに
>>62
DBとのやり取り部分があったりするので他の環境では実行不可なんです orz
>>63
個人的には後者なんですけど、晒せない以上回答は無理ですよね
>>64
再計算はありません。シートの切替も無いので再描画云々でもないです
ということでスレ汚しすいませんでした
0066デフォルトの名無しさん
2012/09/18(火) 19:24:56.82そりゃDBの応答待ちなんじゃねーの?
ステップ実行してみたら?
0067デフォルトの名無しさん
2012/09/18(火) 19:48:42.30実行の可不可なんてどうでもいいからソース晒せっての
0068デフォルトの名無しさん
2012/09/18(火) 20:32:32.47ソースの中で無限ループしてるとこがあり、それを修正したら直りました
m(__)mです
0069デフォルトの名無しさん
2012/09/26(水) 11:04:16.660070デフォルトの名無しさん
2012/09/26(水) 11:38:17.650071デフォルトの名無しさん
2012/09/26(水) 16:06:35.86基本的には機械的に判別するのは無理
UNICODEの場合、先頭に特殊なバイト列が入ってる場合がある
それ以外だと、それぞれのコードで文字として不適切なバイトコードがあるかどうか見る
0072デフォルトの名無しさん
2012/09/26(水) 18:29:04.04>機械的に判別するのは無理
そうっすかぁorz
今、手元にUNICODEのテキストファイルがあって、バイナリエディタで見れば先頭が FFFEなんでそれを見ればいいのかなと
思ってたんですが、UNICODEもいろいろ種類がありそうですからねぇ
諦めます
0073デフォルトの名無しさん
2012/09/26(水) 18:33:26.19そりゃBOM(要検索)だ。
0074デフォルトの名無しさん
2012/09/26(水) 23:25:27.72前に作ったからキーワードだけ
・Openステートメントでバイナリで開く
・Byte型の配列に格納する(InputB と LOF を使う)
・先頭の二要素(2バイト)を確認して、それぞれFF、FEであるか確認する
適当だけどこれでいいと思う
0075デフォルトの名無しさん
2012/09/27(木) 06:19:31.60thxです。
0076デフォルトの名無しさん
2012/09/27(木) 10:49:38.07全然良くない。
BOM無しのファイルもあるんだけど。
BOM無しのファイルは絶対に取り扱わないか、BOM無しの場合判定に間違っても良いならそれでいいけど。
0077デフォルトの名無しさん
2012/10/24(水) 04:16:32.770078デフォルトの名無しさん
2012/10/24(水) 08:45:33.090079デフォルトの名無しさん
2012/10/24(水) 12:11:20.640080デフォルトの名無しさん
2012/10/24(水) 21:56:10.26なんか頭痛が痛くなってくる言い回しだなw
0081デフォルトの名無しさん
2012/10/24(水) 22:24:54.930082デフォルトの名無しさん
2012/11/09(金) 21:30:39.40VBAを実行する環境はサーバではなくクライアントマシンで、パブリックフォルダの所有権を持ったユーザでログオンします。
ヒントだけでも頂けると有り難いです。
よろしくお願いします。
0083デフォルトの名無しさん
2012/11/09(金) 21:32:36.89目的は、大量のアクセス権変更を一括処理化することです。
0084デフォルトの名無しさん
2012/11/09(金) 22:14:07.65要するに、知りたいのはアクセス権変更じゃなく
ディレクトリツリーの一括処理方法なんだろ?
0085デフォルトの名無しさん
2012/11/09(金) 22:34:16.43はい。
少しぐぐってはみたところ、「サーバ環境での処理にADSIで〜」という記事ばかりがヒットしてきて、
クライアント環境からアクセス権変更などの処理がまず可能なのかが分からなくて。。
0086デフォルトの名無しさん
2012/11/10(土) 15:18:18.320087デフォルトの名無しさん
2012/11/10(土) 16:03:42.220088デフォルトの名無しさん
2012/11/10(土) 16:59:51.730089デフォルトの名無しさん
2012/11/10(土) 18:15:28.020090デフォルトの名無しさん
2012/11/10(土) 21:01:03.67データ修正を手入力で何千件もやれとメーカー様から言われた。
頭にきたので、VBA(端末にエクセルしか入ってない)で、IEの自動操作で修正入力しようと
作ってはみたのだが、ふと思ったのだが、これって著作権違反になる?
同じように困ってるほかの組織にプログラムを配るのも、無償、有償かかわらずダメ?
0091デフォルトの名無しさん
2012/11/10(土) 21:17:03.850092デフォルトの名無しさん
2012/11/10(土) 21:25:49.46H社?
0093デフォルトの名無しさん
2012/11/10(土) 21:34:33.74Yes。
0094デフォルトの名無しさん
2012/11/10(土) 21:53:06.020095デフォルトの名無しさん
2012/11/10(土) 22:39:35.570096デフォルトの名無しさん
2012/11/10(土) 22:51:36.74誰が何の著作権を違反しているの?
0097デフォルトの名無しさん
2012/11/10(土) 23:01:01.10某社の社内事務専用システム。
0098デフォルトの名無しさん
2012/11/10(土) 23:06:39.80プログラムを作ったのはあなたでいいの?
何を参考にした?あるいは何かを丸パクリした?
それには他者が権利を主張するどのようなものが関わってる?
細かいところちゃんと書いてくれないと望んでる答えにならないけど、
今書いてる限りではたぶんならないと思うけどね。
あと著作権は余裕があったらさわりだけでも勉強しましょう。
様々なテストケースでちゃんと試してから配れ。
自分とこでちゃんと動いても他所のとこで動かなかったなんてよくある話。
個人で作ったものだし、一気に配らない方がいいかも。
そのプログラムを配布した事でお前さんへの責任が一気に増えることに
なってしまうから気をつけなされ。
0099デフォルトの名無しさん
2012/11/12(月) 00:21:59.82作成したのは自分。Webシステムのhtmlが見えている状態(右クリック禁止処理はされてるが、
IEの通常機能で丸見え)のため、ボタン等の各要素のNameがわかったため、自動操作のコード
は作りやすかった。
メーカーのコードを改変しているわけではないし、Webシステムも正規の権限でログイン
している。ただ、メーカーのコードを解析し、そのNameを自分のコードで利用しているのは
どうなのかなと思ったわけです。またWebシステムの機能を、ログインした後、VBAから自動
操作で、表示された情報を読み書きし、ボタンを押していくって流れなので、入力値のエラ
ーチェックや、面倒な計算などは、すべてWebシステムがやってくれてる状態。
Nameを使わないコーディングもできるけど、もうすでに作ってしまった。
又、ただの末端ユーザーのため、テスト環境すらなく、恐ろしいことに
ぶっつけ本番。その分、注意して作成してはいる。
メーカー様や、専属SE、システム部門には、頼れない状態。
でも、数千件におよぶ手作業でのシステムの入力だけは、阻止したい。
0100デフォルトの名無しさん
2012/11/12(月) 00:32:16.28今となっちゃIE、Firefox、Chrome、Opera、Safari
通常用いられるどのブラウザでも普通にメニューに表示されている
開発者用機能で全部見れるんだからさ。
0101デフォルトの名無しさん
2012/11/12(月) 00:41:39.98ただの末端ユーザの作ったものを他の組織に展開するとか
責任の所在がはっきりしてるならそれでいいんじゃないの?
VBAに関係ないからそもそもスレチな気がする
0102デフォルトの名無しさん
2012/11/12(月) 05:42:28.78単に、自分のスキルをさり気なく自慢したいだけ。
0104デフォルトの名無しさん
2012/12/07(金) 14:19:59.44VB6とExcel2010とかに付属してるVBAって
シンタックス的な違いとかあるのでしょうか??
もしよろしければ違いを明示しているサイトなどを教えてください。
0105デフォルトの名無しさん
2012/12/07(金) 14:22:38.26違いはない
0106デフォルトの名無しさん
2012/12/07(金) 15:17:40.28素早い回答ありがとうございます。
言語的な勉強はVBの本でやってみます。
ありがとうございました。
0107デフォルトの名無しさん
2012/12/08(土) 23:14:32.41exlap.rb使ってRubyでマクロ組み込もうとしてます
Excel2007で.xlsで保存してるんだけどマクロのセキュリティはあらかじめExcelの方で
有効に設定しなきゃいけないんだよね?
有効にしても動かないしどれ選んでも動かないんだけどどうしてなの?
0108デフォルトの名無しさん
2012/12/08(土) 23:19:30.97Excel VBA スレで突込みが入ったのは
"Excel" の部分ではなく "VB"A の部分が原因だよ。
0109デフォルトの名無しさん
2012/12/08(土) 23:20:02.692007では.xlsmにしなきゃいけないのか
失礼しました
0110デフォルトの名無しさん
2012/12/09(日) 10:19:35.09www
ま、知らなかったら引っかかるのも当然で、俺も最初は?となったけど
0111デフォルトの名無しさん
2012/12/15(土) 06:56:12.38別言語でExcelを操作しているのでその都度変更できません
具体的にはMicrosoft Scripting Runtimeにチェックを入れたいです
ひとつの別言語のプログラムでMicrosoft Scripting Runtimeにチェックを入れるマクロを実行→やりたい処理というように書きたいです
0112デフォルトの名無しさん
2012/12/15(土) 07:33:34.78References.AddFromFile
0113デフォルトの名無しさん
2012/12/15(土) 07:33:43.99直接書き込むと出来る方法をみつけました
ですが,外部から他言語でマクロを組み込もうとすると
"C:\Windows\SysWOW64\scrrun.dll"と書いたところが
"C:WindowsSysWOW64 crrun.dll"と書き込まれてしまいエラーが出てしまいます
これを回避する方法はありますか?
0114デフォルトの名無しさん
2012/12/15(土) 07:34:39.95書き込んでいる間にかぶってしまいました
ありがとうございます
それを見つけて実装しているところですが>>113の問題にぶつかっているところです…
0115デフォルトの名無しさん
2012/12/15(土) 08:03:36.650116デフォルトの名無しさん
2012/12/15(土) 09:26:08.460117デフォルトの名無しさん
2012/12/24(月) 14:46:50.28クラス モジュールで実装したクラスを、クラス名から動的にインスタンス化する方法ってないだろうか。
VBAProject
- 標準モジュール
+ FilesCommon
- クラスモジュール
+ Files
+ TreeFiles
+ ListFiles
みたいになってるときに、
[TreeFiles]
Implements Files
' 〜
[ListFiles]
Implements Files
' 〜
[FilesCommon]
Sub ShowList(ListType As String)
Dim Files As Files
Set Files = CreateObject(ListType)
' Filesを使ったリスト化処理
End sub
てな感じにして、クラスモジュールの追加と呼び出し文字列(ListType)の変更だけで
挙動を変えたい(ListType の Select Case を作ってそこもメンテさせるってのはちと不味い)のだが、良い方法ないもんかな
CreateObjectは当然COMでもなんでもないクラスモジュールを扱えないし、
Appication.EvaluateやCallByNameはNewできないし、
VBScriptのEvalをホスト越しに呼び出してもプロジェクト内部のクラスモジュールまではあずかり知りません、だし、
うまく解決するすべがないものかと・・・。
0118デフォルトの名無しさん
2012/12/24(月) 15:06:31.62> ないだろうか。
何様だよ
0119デフォルトの名無しさん
2012/12/24(月) 15:18:31.96質問スレなのだから質問者がいないと成り立たない。
質問する方が立場が上なのは当然である。
0120デフォルトの名無しさん
2012/12/24(月) 15:28:21.780121デフォルトの名無しさん
2012/12/24(月) 15:36:37.23アホかとw
0122デフォルトの名無しさん
2012/12/24(月) 16:03:55.410123デフォルトの名無しさん
2012/12/24(月) 17:14:29.110124デフォルトの名無しさん
2012/12/24(月) 17:25:26.35それが仮にできたとして、ListTypeに不正な値が入ってたらどうする気だ?
0125デフォルトの名無しさん
2012/12/24(月) 18:29:09.00そんときはエラーになっていい
0126デフォルトの名無しさん
2012/12/24(月) 19:06:07.30早く答えろや。
0127デフォルトの名無しさん
2012/12/24(月) 19:34:23.92エラーになっていいって事は、エラーにならなくてもいいのか?
想定外のオブジェクト生成されて平気だと?
恐ろしい設計だな
0128デフォルトの名無しさん
2012/12/24(月) 21:33:40.50ム板やマ板でID有りにしたところで、大した意味はない
ここに来るほどの人ならそんなもん(ry
0129デフォルトの名無しさん
2012/12/24(月) 22:02:01.69可哀そうだから反対だわ
0130デフォルトの名無しさん
2012/12/24(月) 22:14:51.45ユーザーの入力を受けるわけじゃないから。
そこに入る文字列は、マクロをカスタマイズした人間が決める。
カスタマイズ時の手間を減らしたいだけなんだ。
0131デフォルトの名無しさん
2012/12/24(月) 23:26:48.27無理
0132デフォルトの名無しさん
2012/12/24(月) 23:50:17.13>Sub ShowList(ListType As String)
これじゃだめなの?
Sub ShowList(Files As Files)
0133デフォルトの名無しさん
2012/12/29(土) 15:01:13.64ググってもこれといったヒントが見つかりません
ライブラリ的なものでもよいですし、力技でもよいですし、
なにかヒントをいただけないでしょうか?
0134デフォルトの名無しさん
2012/12/29(土) 18:47:50.52ExcelVBAなんだから、Excel上での処理が基本の言語なんだから
なんでそこまで複雑なことをやらせようとするかが不思議だ
勉強したわけでもなんでもないが、VBとかJava、Cとかの
メジャーな言語を使うとか、画像処理自体に強いライブラリを持つ言語を
選べばいいんでないの?
0135133
2012/12/29(土) 19:09:08.47読み取った結果はExcelで管理して集計とかもExcelでやりたいしExcelで全てできれば便利かな〜、と思ってね
VSとかEclipseとかのIDEをインストールするのも手間だし(そもそも知識がないからわからんし)
0136デフォルトの名無しさん
2012/12/29(土) 19:59:20.07http://imagingsolution.blog107.fc2.com/blog-category-10.html
0137133
2012/12/29(土) 21:44:29.92情報ありがとうございます
画像をセルに表示する発想はなかったのでちょっと面白そうですね
ただパフォーマンス的に難がありそうなので外部ツールで二値化と縮小化を行ってから
シートに取り込んで処理してみようかと思います
0138デフォルトの名無しさん
2012/12/29(土) 22:05:18.72マークシート読み取りと文字認識は別なレベルの話だぞ
0140デフォルトの名無しさん
2013/01/06(日) 15:18:27.81(eg 54289 → 5,4,2,8,9 56→ 0,0,0,5,6)
5桁目を10000で割り商を得て、余りが0でないなら次に1000で割り、…10で割って
商と余りを得る
みたいな方法でやっていくしかない?
0141デフォルトの名無しさん
2013/01/06(日) 15:22:30.580142デフォルトの名無しさん
2013/01/06(日) 15:54:01.430143デフォルトの名無しさん
2013/01/06(日) 17:01:33.66あまり変わらないけど、文字列とみなして
1文字目+2文字目+・・・
としたほうがコードがシンプルになるかもね。
0144デフォルトの名無しさん
2013/01/06(日) 17:09:04.33最初に文字列とみなし、その長さを調べて、midで分解していくってこと?
上記の例なら 56は2文字だから上3桁は0で残り2文字について調べれば良いのか。
そういう手もあるのか、なるほどです。
0145デフォルトの名無しさん
2013/01/06(日) 17:16:24.17>>143まんまだと失敗する恐れがある。
左から取得したら駄目だな。
右から1文字目、2文字目〜を取得ということか。
0146デフォルトの名無しさん
2013/01/06(日) 17:19:04.54数値設定
整数値を取得
ループ開始
10のあまりを配列に出力
再配列
10の商を数値に再格納
数値が0の場合ループ解除
ループ終了
これでいいやないの
0147デフォルトの名無しさん
2013/01/06(日) 17:24:13.47言語障害ですか?
0148デフォルトの名無しさん
2013/01/06(日) 18:32:07.25外国人か?
口語体は義務教育で習う
0149デフォルトの名無しさん
2013/01/06(日) 18:34:45.45100000を足してからMID関数で2〜6文字目を取り出すのが一番コードがシンプルになるんでない?
Format関数でもいいけど
0150デフォルトの名無しさん
2013/01/06(日) 18:49:27.640151デフォルトの名無しさん
2013/01/06(日) 19:55:03.87x これでいいやないの
o これでええやないの だろ?
0152デフォルトの名無しさん
2013/01/06(日) 20:00:13.110153デフォルトの名無しさん
2013/01/06(日) 20:18:35.52どっちでも通じるんだよ
こういうのって日本語学校ではなかなか教えないからね
0154デフォルトの名無しさん
2013/01/06(日) 20:30:29.15正しい日本語、なんてどこにもないよね
使う人によって違うし、使ううちに変化するし、文化や流行を組み込んでいくものだし
VBAスレで自分の知らない日本語の使い方されたからって個人攻撃する
その卑しい精神性をまず自覚しろってことですねてんてー
0155デフォルトの名無しさん
2013/01/06(日) 22:20:57.37なるほど!
0156デフォルトの名無しさん
2013/01/07(月) 12:53:44.27A1にもともと書かれているテキストがとても長くてダブルクリックしないと全文は読めない場合
Range("A1").Select
ActiveCell.FormulaR1C1 = "A1の長いテキスト全文"
Range("B1").Select
こうなった時はFormulaR1C1で何が起きているのでしょうか
実際にA1をダブルクリックして全文を読もうとするとマクロは
Range("A1").Select
ActiveCell.FormulaR1C1 = "あ"
With ActiveCell.Characters(Start:=1, Length:=255).Font
.Name = "MS Pゴシック"
.FontStyle = "標準"
.Size = 8……といった感じでフォントの設定が数行入った後で、
Range("B1").Select となるのですが…
0157デフォルトの名無しさん
2013/01/07(月) 12:55:59.850158デフォルトの名無しさん
2013/01/07(月) 14:41:35.69その部分では何も起きてないし何も起きない。
そのコードを読めればわかるけど
セルをダブルクリックする行為はエクセルからしたらそのセルの値を再入力するのと同じ行為ってこと
んでもって、>>156のwith以下はただセルのフォントを指定してるだけだら
今回は省略してもいい部分
0159デフォルトの名無しさん
2013/01/07(月) 14:46:09.17セルのダブルクリックは「キーボードによるセルの編集開始」なので、それはマクロでは実現できませんし記録もされません
そのマクロには「(何もせずに)編集終了」→「カーソル移動」が記録されているだけです
0160デフォルトの名無しさん
2013/01/07(月) 17:09:24.10何もせずに編集終了ってどういう動作をすれば記録されるのでしょうか
いろいろ試してるんですけど同じようになりません
0161デフォルトの名無しさん
2013/01/07(月) 19:57:20.18VBAにそんな機能がないので、どうやっても記録されない
0162デフォルトの名無しさん
2013/01/07(月) 20:28:50.49Range("A1").Select
ActiveCell.FormulaR1C1 = ""
の2行が記録される
最後にアクティブを解除するために別のセルクリック
0163デフォルトの名無しさん
2013/01/07(月) 20:40:00.42>>160
何もせずに編集終了は別のセルクリック(select)すればいい
0164デフォルトの名無しさん
2013/01/08(火) 00:11:32.61セルをダブルクリックする目的は、隠れている部分を読むためなんだよね?
マクロでセルをSelectするだけでは、隠れた部分は出てこないっていうか、そんな方法はないよ
API無しで簡単にやるなら同位置にテキストボックスを貼り付けるぐらいしかないんじゃないかなあ
0165デフォルトの名無しさん
2013/01/08(火) 00:12:58.270166デフォルトの名無しさん
2013/01/08(火) 01:00:52.810167デフォルトの名無しさん
2013/01/09(水) 15:07:51.750168デフォルトの名無しさん
2013/01/09(水) 16:08:16.48恒常ループかけて編集可能にしてみるのは?
0169デフォルトの名無しさん
2013/01/09(水) 16:24:50.75cancel =TRUE にするかsendkeysの後doeventsでセル編集モードになった
文字送りも可能
シートを最前面に出して実行すればバックグラウンドでコード動かしてても問題なし
必要なら同期処理とればおk
0170デフォルトの名無しさん
2013/01/09(水) 17:18:03.09単純に見やすくしたいだけなら
ショートカットキーにマクロ割り当てて
セルの書式設定を折り返しに、フォント小さくしたり
行や列のサイズをコントロールしたり
見終わったら元に戻すとか
がちがちにやるなら表示フォントから文字列サイズ計算して綺麗に並べるとか
透明化フォームに読み出した文字を拡大表示して虫眼鏡ツール作るとか
いろいろやり方はあるかと
0171デフォルトの名無しさん
2013/01/09(水) 19:30:41.55業務用を考えるなら慎重にな(特に{F2}{NUMLOCK}絡み)お勧めはWSH併用
0172デフォルトの名無しさん
2013/02/03(日) 14:37:06.94excel2002でマクロ組んでいますが、
sheetにある画像のみ印刷するように設定したいと思っています。
そんな方法あるでしょうか?
よろしくお願いします。
0173デフォルトの名無しさん
2013/02/03(日) 15:18:48.82シートのコピーを作って画像以外を消去してから印刷
0174デフォルトの名無しさん
2013/02/03(日) 18:48:17.90ありがとうございます。できそうな気がしてきました。
0175デフォルトの名無しさん
2013/02/05(火) 23:23:00.31Excel2003でUserForm1の中にTextBox1があります。
あるマクロからこのUserForm1をロードして、自動的にTextBox1の中に
あるセルのデータ(或いは変数に入っているデータ)を入力させたいのですが、
この様な方法はあるのでしょうか?
宜しくお願いいたします。
0176デフォルトの名無しさん
2013/02/06(水) 00:59:16.93UserForm1.TextBox1.Text = Sheet1.Range("A1").Value
UserForm1.Show
フォームがモーダルじゃなくてもいいなら
UserForm1.Show False
UserForm1.TextBox1.Text = Sheet1.Range("A1").Value
0177デフォルトの名無しさん
2013/02/06(水) 21:47:11.72ありがとうございます!
逆にモードレスの方が良かったので大変助かりました
0178デフォルトの名無しさん
2013/02/06(水) 22:36:16.80エクセルVBAエディタにて
IF文で文字変数がユーロ記号(?)の場合の文を書きたいんですけど、VBAエディタ上で書くと。。。
If str = "?" Then
何かしら実行
End If
なのが
If str = "?" Then
何かしら実行
End If
みたく?マークになってしまいます@Office2007/Win7のVBA
エクセルのシートやパワポ上ではふつーに?記号は表示されるのに
なにゆえVBAエディタ上だけ?になるのでしょうか?
Unicodeとかのコード設定かなと思ったのですがVBAエディタ上で
設定できそうな項目なさそうですし。。
ぜひ教えて下さい!
0179デフォルトの名無しさん
2013/02/06(水) 23:43:04.98VBAそのものはUnicode対応だが、VBEはしてない
ChrWを使え
0180デフォルトの名無しさん
2013/02/07(木) 00:38:30.25ありがとうございます!
msgboxで出してもずっとハテナマークだし半泣きでした。
頂いたヒントでググってたら↓があって読んだら仕組みわかりました。
http://codezine.jp/article/detail/1718
0181デフォルトの名無しさん
2013/02/13(水) 08:17:48.50それについて詳しく解説してるサイトとかありますか?
ていうか、VBAでIEを操作する際って
XXXXXX.Navigate "http://XXXXX.ne.jp/"
このページを開く構文は必ず必要なんですか?
自分でIEのページを開いて、ページを開いた後の処理をVBAにやらせるってことはできないんですか?
ページを開いた後の処理をVBAにやらせるには、ページを開くことからVBAにやらせないといけないんですか?
0182デフォルトの名無しさん
2013/02/13(水) 08:44:48.82http://www.activexperts.com/
0183デフォルトの名無しさん
2013/02/14(木) 08:40:10.44ExcelVBAでマクロ作ってるんですが、Win32API関数で、引き数にNULLポインタを渡す場合は どう表記したら良いのでしょう?
0184デフォルトの名無しさん
2013/02/14(木) 10:07:28.800
0185デフォルトの名無しさん
2013/02/14(木) 10:26:57.320だと型エラー為ると勝手に思い込んでました。
お恥ずかしい
精進します
0186デフォルトの名無しさん
2013/02/14(木) 18:25:20.83vbNullString使え
0187デフォルトの名無しさん
2013/02/14(木) 18:27:55.53memset(ptr, NULL, len)
みたいで気持ち悪い。
0188デフォルトの名無しさん
2013/02/14(木) 18:29:15.89確か、APIの引数にNULLポインタとして渡す目的も、vbNullStringにはあったと思うが
0189デフォルトの名無しさん
2013/03/09(土) 16:39:33.15AppointmentItemオブジェクトを見てもReminderプロパティにdateとかtimeがないんですけど
どこにセットしろっていう話なんでしょうか。
0190デフォルトの名無しさん
2013/03/09(土) 18:08:31.90http://www.youtube.com/watch?v=SgmhgeTDc5M
0191デフォルトの名無しさん
2013/03/09(土) 23:11:55.58レスありがとうございました。とりあえず、引き算して掛け算してReminderMinutesBeforeStartに放り込んで対応しました。
0192デフォルトの名無しさん
2013/03/13(水) 18:07:18.47新人にVBAの改造させたら言語が古いとか行って文句を言ってくる
0193デフォルトの名無しさん
2013/03/13(水) 18:26:38.760194デフォルトの名無しさん
2013/03/13(水) 19:03:42.530195デフォルトの名無しさん
2013/03/13(水) 23:41:33.720196デフォルトの名無しさん
2013/03/14(木) 03:04:46.29その左右または上下の枠が自動的にずれないからレイアウトの調整が大変と聞いたのですが、
他の言語でもそうなんですか?
素人にとってはエクセルのように自動でずれてくれるようなイメージが刷り込まれています。
おかしなことを言ってたらすいません。
0197デフォルトの名無しさん
2013/03/14(木) 08:07:18.12内容ではなく文体がおかしい
いや、なんとなく言ってることは解るんだけど、
エスパーしてまで答えるような内容じゃないしな
0198デフォルトの名無しさん
2013/03/14(木) 14:06:05.420199デフォルトの名無しさん
2013/03/14(木) 20:30:01.45うまく答えられないときはエラそうになんだかんだいちゃもんつけてきます
看板に偽りスレなので素人が質問しても時間の無駄です
わかったら相手にせず黙って去りましょう
0200デフォルトの名無しさん
2013/03/14(木) 21:24:08.290201デフォルトの名無しさん
2013/03/15(金) 17:56:40.860202デフォルトの名無しさん
2013/03/15(金) 18:20:57.680203デフォルトの名無しさん
2013/03/15(金) 21:03:48.32cmd.exeに出力ってどういう意味だ?
とりえあず予定表の一覧なら
http://msdn.microsoft.com/ja-jp/library/office/bb219895(v=office.12)
0204デフォルトの名無しさん
2013/03/20(水) 12:25:21.260205デフォルトの名無しさん
2013/03/20(水) 13:25:02.820206デフォルトの名無しさん
2013/03/20(水) 19:30:49.660207デフォルトの名無しさん
2013/03/20(水) 19:51:23.45始まってしまえば実行速度は2010と変わらないみたいです。
0208デフォルトの名無しさん
2013/03/20(水) 22:41:26.67氏名だけOKボタンを2回押さないと反映されません。なぜこうなるのでしょうか。
ワード2013では一度に反映されますが、2003で使う必要があるので困っております。
以下に参考までに実物をアップロードしました。どうかご確認・ご教授の程お願いします。
http://www.dotup.org/uploda/www.dotup.org4059350.doc.html
0209デフォルトの名無しさん
2013/03/21(木) 06:10:43.680210デフォルトの名無しさん
2013/03/27(水) 06:37:11.96EXCELのVBAでアプリを操作したいのですが、できますか?
したいことの大まかな流れですが、下記のURLでダウンロードできる「アマチュア局インターネット申請」のアプリを起動し、作業を自動でさせたいのです。
http://www.denpa.soumu.go.jp/public/prog/index.html
アプリは総務省提供のものです。
具体的な行いたい作業としては
�@アプリを起動
�A「確認」のダイヤログで「キャンセル」を選択
�B新しく開いたウィンドウで「ファイルから読み込む」を選択
�C「選択」のダイヤログでエクセル上にあるパスのファイルを選択
これを繰り返したいのです。
EXCELのVBAについては基本的な知識はあります。
よろしくお願いします。
0211デフォルトの名無しさん
2013/03/27(水) 07:10:35.43じゃああとはWinAPIの知識だな
主にウインドウハンドルと、ウィンドウメッセージについて勉強してこい
大まかに話すと、該当アプリのウィンドウハンドルを取得して
操作するコントロール(ボタンや入力ボックスなど)のハンドルを取得して
そのハンドルに操作メッセージを送れば良いだけだ
あるダイアログのOKボタンのハンドルが12345だとしたら
ハンドル12345にクリックメッセージを送れって命令を書いてやると、そこに
マウスカーソル持って行かなくてもそのボタンをクリックしたことになる
ただ、この手のものはプログラムで申請の自動化とかすると、不正(提供者が意図しない不正規の手順)な申請とかで
プログラム作った奴が訴えられかねないから、自己責任&具体的なコード回答は無しで頑張るしかないぞ
0212デフォルトの名無しさん
2013/03/27(水) 14:01:02.51(1)〜(4)を繰り返すと、大量にアプリケーションが起動することになると思うのだが、やりたいのは
それなのか?
仮に、申請までを繰り返したい場合、法的/道義的にそれは許されるものなのか?
申請を受け付けるサーバへの攻撃と取られる可能性があるぞ。
0213デフォルトの名無しさん
2013/03/27(水) 16:54:29.77http://toro.2ch.net/test/read.cgi/tech/1363042502/
0214210
2013/03/28(木) 07:38:38.73まず、私がこの操作を自動化させたい目的ですが
ファイルから読み込んだブラウザのウィンドウを連続印刷したいからです。
印刷処理の部分については自分でコードを作れると思いますので省いておりました。
このアプリを使って既に申請されている局の申請ファイルを読み込むと
申請した内容が整理された形でブラウザに表示されます。
WinAPIの知識ですか。
まずはネットで調べてみたいと思います。
0215デフォルトの名無しさん
2013/03/28(木) 15:15:35.910216デフォルトの名無しさん
2013/04/04(木) 17:55:38.87修正内容はダイアログを表示しないで自動的にtest1.jpgという名前でCドラ直下に保存できればと思います。
Option Explicit
'ファイル保存ダイアログ
Private Function GetSaveFileName() As String
Dim sfile As String
sfile = Application.GetSaveAsFilename(fileFilter:="JPGファイル (*.jpg), *.jpg")
If sfile = "False" Then
GetSaveFileName = ""
Else
GetSaveFileName = sfile
End If
End Function
Private Sub CommandButton1_Click()
Dim rg As Range
Dim cht As Chart
Dim fina As String
0217デフォルトの名無しさん
2013/04/04(木) 17:56:19.24fina = GetSaveFileName
If fina <> "" Then
'選択範囲を取得
Set rg = Selection
'選択した範囲を画像形式でコピー
rg.CopyPicture appearance:=xlScreen, Format:=xlPicture
'画像貼り付け用の埋め込みグラフを作成
Set cht = ActiveSheet.ChartObjects.Add(0, 0, rg.Width, rg.Height).Chart
'埋め込みグラフに貼り付ける
cht.Paste
'JPEG形式で保存
cht.Export Filename:=fina, filtername:="JPG"
'埋め込みグラフを削除
cht.Parent.Delete
End If
End Sub
0218デフォルトの名無しさん
2013/04/04(木) 18:02:12.580219デフォルトの名無しさん
2013/04/04(木) 18:15:13.26嫌です
0220桃白白
2013/04/05(金) 12:52:08.01桃白白がお願いされちゃう。
Option Explicit
'ファイル保存ダイアログ
Private Function GetSaveFileName() As String
GetSaveFileName = "c:\test1.jpg"
End Function
Private Sub CommandButton1_Click()
Dim rg As Range
Dim cht As Chart
Dim fina As String
'保存ファイル名を取得
fina = GetSaveFileName
If fina <> "" Then
Set rg = Selection
rg.CopyPicture appearance:=xlScreen, Format:=xlPicture
Set cht = ActiveSheet.ChartObjects.Add(0, 0, rg.Width, rg.Height).Chart
cht.Paste
cht.Export Filename:=fina, filtername:="JPG"
cht.Parent.Delete
End If
End Sub
0222デフォルトの名無しさん
2013/04/05(金) 15:08:41.380223桃白白
2013/04/05(金) 15:47:21.55おいやめろ。まるで桃白白がお答えした内容が期待はずれの
ものであり桃白白に失望したといわんばかりじゃないか。
そんなことほんとは思ってないくせに。心にもないこと言わないでちょうだい。ふん。
0224デフォルトの名無しさん
2013/04/16(火) 15:03:53.95クラムチャウダー吹き出した。
0225デフォルトの名無しさん
2013/04/26(金) 19:45:29.36会社でバージョン管理システムを入れてるところならそれを使ってるんでしょうけど。
今んとこ、出来たマクロに日付を入れて特定のフォルダに入れてるんです( e.g xxx_20130402.xlsm etc)
が、やはり別のフォルダに入れて更新
したのを時々忘れてしまったりしてどうしようかなぁ〜と思っています^^;
0226デフォルトの名無しさん
2013/04/26(金) 20:00:41.700227デフォルトの名無しさん
2013/04/26(金) 20:34:20.38最後にマクロ保存のコードを追加したりしてマクロの保存もVBAでやっちゃえば?
0228デフォルトの名無しさん
2013/04/26(金) 21:13:14.06実行した時に自分自身を特定のフォルダに上書き保存するってことですかね?
あぁそういう手もあるか。
0229227
2013/04/26(金) 22:37:35.63ファイル名は日付で管理してるということだから
常に上書き保存じゃなくて同じファイル名が存在していないときのみ保存するとか。
0230デフォルトの名無しさん
2013/04/26(金) 22:58:05.30参考になりました。ありがとう
0231デフォルトの名無しさん
2013/04/27(土) 01:31:45.70エクセルVBAのマクロなんて、エクセル表の補助作業にしか使わんから
もとのエクセル表の管理が出来てればマクロの管理なんて考える必要ない
0232デフォルトの名無しさん
2013/04/27(土) 05:57:56.22ウィンドウズアプリケーション的な物もVBAで作っていたから管理が面倒だった
そのうちVB6、そしてC#を使うようになったから今は>>231と同じだが
管理に奔走する奴等のことも理解できる
0233デフォルトの名無しさん
2013/05/03(金) 16:24:56.80例えば、Sub JISAKU()のように マクロ名JISAKUからマクロを記述した該当モジュールを即座に見つける方法ってありますか?
0234デフォルトの名無しさん
2013/05/03(金) 16:54:08.840236デフォルトの名無しさん
2013/05/04(土) 00:36:10.000237234
2013/05/05(日) 18:45:30.48補足だけど、検索後にプロパティウィンドウ
(デフォルトなら左上のはず)
の該当モジュールが反転するので、
検索対象がどのモジュールにあるのか一発でわかる。
236に便乗するけど、定義に移動したのちに
Ctrl + Shft + F2 を押下すると元の位置に戻るので
覚えておくと作業が捗るよ。
(プロシージャの数が増加するほど役に立つ。)
0238デフォルトの名無しさん
2013/05/07(火) 13:34:18.34VBEが表示されているときにF2キーでオブジェクトブラウザが表示される。
そこで検索したり、"VBAProject"を選択してシートやモジュールを選択して、定義したマクロ一覧なんかをブラウズできる。
(VBAProjectというのはプロジェクト名のデフォルト)
VBEで編集中のときは、コード入力ウィンドウの上部に"(declaration)"と表示しているコンボボックスがあるので、そこで編集中のシートやモジュールの関数を選択できる。
0239デフォルトの名無しさん
2013/05/11(土) 15:38:41.96Excel2013にしから一切覚えなくなった
Excel立ち上げてVBE開くたびにウィンドウが全て消えてるので不便です
Access2013のVBEは以前と変わらず覚えてるのだけど、Excel2013VBEの何が原因なんでしょうか?
0240デフォルトの名無しさん
2013/05/14(火) 10:41:53.28スマートアートオブジェクトの図についてなんですが、
vba上で、挿入した画像のみをクリアして、初期状態に戻す方法がありましたら教えてください。
0241桃白白 ◆9Jro6YFwm650
2013/05/15(水) 15:25:00.19「vba上で」は「挿入した」にかかるのか「戻す」にかかるのか
桃白白よくわかんないんだけど、削除する画像にだけ特別な名前をつけちゃったらいんじゃない?
DeleteImage1みたいな。画像を列挙して名前にDeleteが含まれてたらそれを削除みたいな。
0242デフォルトの名無しさん
2013/05/26(日) 17:46:36.07たとえば、[B]列セルにamazonの商品ページURLが入力してあって、
そのページ毎にある
http://ec2.images-amazon.com/images/I/●●●●._SL500_AA300_.jpg
という画像ファイルのURLを検索して[C]列セルに抽出したい場合、
どのようなコードを組めば良いでしょうか?
よろしくお願いします。
0243デフォルトの名無しさん
2013/05/26(日) 21:37:10.700244デフォルトの名無しさん
2013/05/26(日) 23:35:03.88vba html parser で検索
0245デフォルトの名無しさん
2013/06/19(水) 01:05:06.33是非お力をお貸しください。
エクセルで、B列だけ、B2から下へ空白があるまでの文字を
テキストファイルに書き出し、1.txtで保存し、
またその下の文字列から次の空白の上までを2.txt・・・と、
名前を付けて保存したいのですが、どのようなコードを組んだら
よいかご教授ください。よろしくお願いします。
0246デフォルトの名無しさん
2013/06/19(水) 01:44:34.41このようなコードです
Sub B_n_txt()
n = 1 ' ファイルの番号
r1 = 2 ' r1=始まりの行
While Cells(r1, 2) <> "" ' 最後ならプログラム終わり
If Cells(r1 + 1, 2) = "" Then ' 区切りを見つける
r2 = r1 ' r2=終わりの行
Else
r2 = Cells(r1, 2).End(xlDown).Row
End If
Open n & ".txt" For Output As #1 ' ファイルに書き込む
For i = r1 To r2
Print #1, Cells(i, 2)
Next
Close #1
n = n + 1 ' 次のファイル番号
r1 = r2 + 2 ' 次の先頭
Wend
End Sub
0247デフォルトの名無しさん
2013/06/19(水) 01:58:13.00遅くに作成いただきましてありがとうございました!
早速試してみました。出来たーーー!
手動で大量に保存していたので、本当に助かります。
明日から・・・じゃない今日からの作業が楽しみです。
またの機会がありましたら何卒宜しくお願いいたします。
0248245
2013/06/19(水) 22:26:35.34昨日と似たもので、エクセルで2007で。
<1>
M列に数字のデータが昇順に並んでいます。M2からがデータです。
そのM列で同じ数字の列までのB2からのデータをデスクトップに
1.txt、2.txt・・・と保存したいのですが。
たとえばM2〜M4までの数字が同じなら、B2〜B4までのデータを
デスクトップに順番に保存するというものです。
B列は半角数字とアルファベットでデスクトップはC:\Users\admin\Desktop\
です。
0249245
2013/06/19(水) 22:32:49.52そして、>>248にもうひとつ条件を入れて作成が可能であれば・・・
M列と同じ数字の列数と同じB列のものを抜き出すのですが、
その時、Q列が全角のRなら1R.txtで保存、全角のLなら1L.txtなど、
同じM列の数字の中のものだとわかるような方法で保存したいのです。
(Q列は全角Rか全角Lのみとなっています)
たとえばM2〜M4までが同じ数字だが、Q2とQ4がR、Q3がLなら
B2とB4のデータを1R.txt B3を1L.txtと保存し、
次のM5〜は上記と同様2R.txt・・・・・と保存していくものが希望です。
何卒よろしくお願いいたします。
0250デフォルトの名無しさん
2013/06/19(水) 22:47:49.250251デフォルトの名無しさん
2013/06/19(水) 22:55:24.53>何卒よろしくお願いいたします。
嫌です
0252245
2013/06/19(水) 23:05:47.80不愉快にさせてしまい申し訳ありません。
0253デフォルトの名無しさん
2013/06/19(水) 23:10:27.65果報は寝て待て。
0254デフォルトの名無しさん
2013/06/19(水) 23:53:16.55俺が作成料2万円でやってやる
仕様の変更や追加は条件一つに付き3000円
0255デフォルトの名無しさん
2013/06/20(木) 07:34:25.85最初から努力などしてないくせに
0256245
2013/06/20(木) 08:35:19.31せっぱつまっていたのでお願いしてみましたが、
>>249は出来ませんでしたので
ちまちま手作業で乗り切ろうと思います。
スレ汚しして申し訳ございませんでした。
>>246さん、本当にありがとうございました。
0257デフォルトの名無しさん
2013/06/20(木) 11:37:32.35雰囲気こんな感じ。
For i = 2 To maxRow
If Cells(i, 17).Value = "R" Then
rBuf = rBuf & Cells(i, 2).Value & vbCrLf
Else
lBuf = lBuf & Cells(i, 2).Value & vbCrLf
End If
Next
Open "1R.txt" For Output As #1
Print #1, rBuf
Close #1
Open "1L.txt" For Output As #1
Print #1, lBuf
Close #1
0258デフォルトの名無しさん
2013/06/20(木) 18:22:26.64ありがとうございます。
何故か中身が空っぽで保存されていました。
自動保存から切り貼りしてなんとかやっているようなレベルなので
厳しいですが色々調べながら頑張ります。
本当にありがとう!
0259デフォルトの名無しさん
2013/06/20(木) 18:50:16.31丁寧な言葉は使ってるけど、言いたいことは
>>257ご苦労さん、全く使えねぇコード書きやがって動かなきゃ意味ねえんだボケ!
ってところかw
0260桃白白 ◆9Jro6YFwm650
2013/06/20(木) 18:55:59.95うるせえな、ちょっと黙ってろ。
0261デフォルトの名無しさん
2013/06/20(木) 19:41:13.25ん?俺はお前にレスした覚えはないが。
何かスイッチ押しちゃったw
0262桃白白 ◆9Jro6YFwm650
2013/06/20(木) 19:44:49.91でけーた。試してみて。
https://friendpaste.com/1MQf5hd3f08yQhMLmS32c
0263デフォルトの名無しさん
2013/06/20(木) 20:02:44.420264デフォルトの名無しさん
2013/06/20(木) 21:21:07.67ありがとうございます!凄いです!魔法使いみたい。
何時間もかかっていたややこしい仕事が一瞬で済むなんて。
作っていただいたコード見てもさっぱりわからない自分が情けないです。
基本から勉強すべきなんだなと痛感しました。
自分で努力しろと助言くださった方々、まさしくその通りです。
みなさんに感謝の気持ちでいっぱいです。ありがとうございました。
0265デフォルトの名無しさん
2013/06/20(木) 21:27:07.060266デフォルトの名無しさん
2013/06/20(木) 21:43:16.94>作っていただいたコード見てもさっぱりわからない自分が情けないです。
この時点でお前のために書いてないと気づけよw
0267デフォルトの名無しさん
2013/06/21(金) 23:13:03.660268デフォルトの名無しさん
2013/06/22(土) 00:31:32.15↑なんてよむにょ?
0269デフォルトの名無しさん
2013/06/22(土) 00:38:54.330270デフォルトの名無しさん
2013/06/22(土) 01:37:03.71ドラゴンボールはすでにオッサン世代しか知らんのか
0271デフォルトの名無しさん
2013/06/22(土) 15:07:38.480272デフォルトの名無しさん
2013/07/03(水) NY:AN:NY.AN先日はありがとうございました!
もうひとつ、質問させてください。
>>262で保存したものを開くと、
カーソルがデータの最初にある状態で保存されていました。
カーソルをファイルの末尾へ移動して保存する場合、
どういう構文をどこに足せばいいのでしょうか・・・
色々調べてみましたが自力では無理でした。
申し訳ありませんがよろしくお願いします。
0273デフォルトの名無しさん
2013/07/03(水) NY:AN:NY.ANカーソルをB列の最後のデータに移動
Cells(Rows.Count, 2).End(xlUp).Select
0274デフォルトの名無しさん
2013/07/04(木) NY:AN:NY.AN早速ありがとうございます。
何行目に足せばいいのでしょうか・・・
0275デフォルトの名無しさん
2013/07/04(木) NY:AN:NY.AN0276デフォルトの名無しさん
2013/07/04(木) NY:AN:NY.AN0277デフォルトの名無しさん
2013/07/04(木) NY:AN:NY.AN読み込めず、開いて末尾にカーソル持っていって、
DELキー何度も連打して上書き保存したら、読み込めたんです。
ってことは、元のB列のデータになにかわからない空白がある?
空っぽの頭で考えたのですが、さっぱりわからなくって。
0278デフォルトの名無しさん
2013/07/04(木) NY:AN:NY.AN明日のランチはカツカレーに決定。おやすみなさい。
0279デフォルトの名無しさん
2013/07/04(木) NY:AN:NY.AN0280デフォルトの名無しさん
2013/07/04(木) NY:AN:NY.AN0281デフォルトの名無しさん
2013/07/04(木) NY:AN:NY.AN下衆の勘ぐり?
0282デフォルトの名無しさん
2013/07/04(木) NY:AN:NY.AN不慣れで何をどう説明したらいいのかすらわからず、
グダグダになってすみません。
>>262で桃白白さまに作っていただいたVBAの最後の部分、
Sub SaveLR_(filename, value)
Dim n As Long
n = FreeFile
Open filename For Output As #n
Print #n, value
Close n
End Sub
データを抽出し、ここでテキストに貼るように作っていただきましたが、
最後の改行だけを無くして保存する方法をお教えください。
よろしくお願いいたします。
0283デフォルトの名無しさん
2013/07/04(木) NY:AN:NY.ANパイパイのコードは知らんが Print # で改行無しなら
Print #n, value;
0284デフォルトの名無しさん
2013/07/04(木) NY:AN:NY.AN試したところ、空白が無くなって、いけそうです!
明日会社で試してみます。
今から戻って試したい位です。ありがとうございます。
マクロを実行するとDROPBOXの複数のフォルダに保存するマクロを作ったのですが
ユーザー名が1つ1つのパソコンで異なり他のPCでこのマクロを実行するとエラーがでます(当たり前ですが・・・)
マクロでユーザー名を取得することは可能でしょうか?
0286デフォルトの名無しさん
2013/07/12(金) NY:AN:NY.ANhttp://www.ken3.org/vba/backno/vba114.html
0288デフォルトの名無しさん
2013/07/16(火) NY:AN:NY.ANDim WshShell As Object
Set WshShell = CreateObject("WScript.Shell")
Debug.Print WshShell.SpecialFolders("MyDocuments")
0289デフォルトの名無しさん
2013/07/16(火) NY:AN:NY.ANレスありがとうございます。
Dropboxがマイドキュメントフォルダに入っていません。
rootは、C:\Users\ユーザー名\Dropboxになってます。
この場合でも、SpecialFoldersで指定は可能でしょうか?
0290デフォルトの名無しさん
2013/07/16(火) NY:AN:NY.ANフォルダを検索して、存在しなければフォルダを作るようなコード書けばいいんじゃね?
0291デフォルトの名無しさん
2013/07/16(火) NY:AN:NY.ANDropbox自体が特殊で場所移動とかできないんですよねー。
なんか無理そうだな orz
0292デフォルトの名無しさん
2013/07/16(火) NY:AN:NY.ANDropbox限定か。
なら、http://hardsoft.at.webry.info/201111/article_4.html をVBAに書き換えろ。
「dropbox フォルダ 場所 取得」でググったら一番上だ。検索時間1分。
0293デフォルトの名無しさん
2013/07/16(火) NY:AN:NY.AN0294デフォルトの名無しさん
2013/07/16(火) NY:AN:NY.AN>********をVBAに書き換えろ。
WScript.Shellも理解できない人にそんなこと言ったって・・・・・・・・・w
0295デフォルトの名無しさん
2013/07/16(火) NY:AN:NY.ANほら、全コード書いちゃうと荒れるじゃん
0296デフォルトの名無しさん
2013/07/16(火) NY:AN:NY.ANhttp://hardsoft.at.webry.info/201111/article_4.html
を見て何とかなるスキルがあるなら >>289のような質問自体が生じないってこと。
>>288 に対して >>289の再質問を見ると
SpecialFolders("MyDocuments")が何を返すのかを調べもしていない
= 意味不明でもコピペするだけで動くコードがほしい ということでしょう。
[C:\Users\<ユーザー名>\Dropbox]決め打ちで良いのならこの文字列を取得
する方法は上記以外にもいくつもあるよね。
自分ならExpandEnvironmentStringsで%USERPROFILE%を取得とか
WScript.Network UserName で<ユーザー名>を取得することを検討するな。
0297デフォルトの名無しさん
2013/07/16(火) NY:AN:NY.ANDropboxのパス取得が目的なら、それでは不十分。
0298デフォルトの名無しさん
2013/07/16(火) NY:AN:NY.AN> Dropbox自体が特殊で場所移動とかできないんですよねー。
これはいくら何でもひどい
0299296
2013/07/16(火) NY:AN:NY.ANでしょうね
自分がDropboxを使っていないのとUPするとき長くなるので以下の文章を抜いちゃったんだ
「Dropboxは使っていないので無責任になるが上記URLにDropboxの場所がデフォルトの場合
C:\Users\<ユーザー名>\Dropboxになる。また >>293 ・・・場所を変更できるからな。
とあるので対象PCはすべてデフォルトということを元>>285は検証しているのだろうか。
>>291 Dropbox自体が特殊で場所移動とかできないんですよねー。
とあるが 特殊なDropboxなのだろうか?それとも移動可能ということを知らないだけなのだろうか?」
もしユーザーが簡単にC:\Users\<ユーザー名>\Dropboxの場所を変更できるのならだれか
元>>285に引導を渡してやってくれ。
0300デフォルトの名無しさん
2013/07/16(火) NY:AN:NY.ANよくある普通の設定ダイアログで、普通に変えられるよ。
0301デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.ANFileSystemObjectのFolderExistsでフォルダがあるかチェックして
フォルダが無ければ終了するかフォルダピッカー出して選択してもらう
0302デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.ANDropboxフォルダが書かれてるファイルがあるから、オープンして内容読んでデコードするだけじゃん。
0303デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.ANどこのどれ?
0304デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.AN0305デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.AN>>292のリンク先に正解のPerlコードがある
0306285
2013/07/17(水) NY:AN:NY.ANパールをVBAへ変換できるPG探してみます。
>>293
本当ですね orz 場所移動できました。すみません。
>>294
頑張ります!>>296
>>296
自分ならExpandEnvironmentStringsで%USERPROFILE%を取得とか
WScript.Network UserName で<ユーザー名>を取得することを検討するな。
ここらへんググってみます。
>>298
バカですみません。
>>300
助かりました!
0307デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.ANDim path As String
Dim wsh As Variant
Set wsh = CreateObject("Wscript.Shell")
path = wsh.SpecialFolders("AppData") & "\DropBox\host.db"
Dim fn As Long
Dim buf As String
fn = FreeFile
Open path For Input As #fn
Do Until EOF(fn)
Line Input #fn, buf
Loop
Close #fn
Dim ary As Variant
ary = Split(buf, vbLf)
GetDropboxPath = StrConv(decodeBase64(ary(1)), vbUnicode)
End Sub
decodeBase64は、ここのコードをコピペで。
http://www.gizcollabo.jp/vbtomo/log/archive/vbqanda_4318_2.html
0308デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.AN添削。
Function GetDropboxPath() As String
Dim path As String
Dim wsh As Variant
Set wsh = CreateObject("Wscript.Shell")
path = wsh.SpecialFolders("AppData") & "\DropBox\host.db"
If Dir(path) = "" Then Exit Function
Dim fn As Long
Dim buf As String
fn = FreeFile
Open path For Input As #fn
Line Input #fn, buf
Close #fn
Dim ary As Variant
ary = Split(buf, vbLf)
GetDropboxPath = StrConv(decodeBase64(ary(1)), vbUnicode)
End Function
0309デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.AN0310デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.ANLine Input ってLFのみだと改行コードだとみなさないんだっけ?
0311デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.AN「そのファイル」はLFで改行された二行固定(すくなくとも今現在は)。
Line InputはLFを認識しない。
0313デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.AN別に貶めてるとかそういうことじゃないんだけど。
0314デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.ANうぜーやつ
0315デフォルトの名無しさん
2013/07/18(木) NY:AN:NY.ANするってのはどう?
本スレでも、コード書きたくてウズウズしてる人いるみたいだし。
それとも、そんな性質のスレほかにもうある?
0316285
2013/07/18(木) NY:AN:NY.AN>>308さんのVBAをcallで読みだしてCommandで保存できるようにしました。
この時saveを使えば開いてる場所に保存されるのですが、saveasメソッドを使用して指定するとアクセスできませんエラーがでてしまいます。
助けてください orz
0317デフォルトの名無しさん
2013/07/18(木) NY:AN:NY.ANエラーになるというコードを晒せ。
0318デフォルトの名無しさん
2013/07/18(木) NY:AN:NY.AN>>1にはコード作成依頼はダメとか、丸投げダメとは一切書いていない。
「VBAを使った質問ならなんでもござれ」なんだから何でもいいんじゃないの?
0319デフォルトの名無しさん
2013/07/18(木) NY:AN:NY.ANにほんご むずかしい です よくわからない
「作成依頼」と「質問」はおなじことなんでしょうか
0320ピラフ
2013/07/18(木) NY:AN:NY.ANたとえば、相談に乗って欲しいと男を家に誘い込み、
省エネのためといって電気を消し、じつは・・・むぎゅと
いう行動に出た場合、相談とせっくすは完全に同じことであると
いうことになると思いますので、作成依頼は質問であるということで
いいのではないでしょうか。
0321285
2013/07/18(木) NY:AN:NY.AN>>317
Sub CommandButton()
Call GetDropboxPath >>308さんのこれでドロップボックスの保存先呼び出すと解釈しました
'ActiveWorkbook.SaveAs これなら何故か上手くいく。
ActiveWorkbook.SaveAs "\新しいフォルダ\練習.xlsm" ←なので直下のこれを指定したのですが・・・
End Sub
0322デフォルトの名無しさん
2013/07/18(木) NY:AN:NY.ANFunctionは値を返す関数で、変数に代入したり式の中で使ったりする。
Call myFunction()
だと、戻った値が後で使えない。
Sub CommandButton()
ActiveWorkbook.SaveAs GetDropboxPath() & "\練習.xlsm"
End Sub
とやれば、保存できる。
ファイル保存ダイアログを出したかったり、存在しないフォルダを新規作成してその中に保存したい場合とかは、
さらに別のコードが必要。
これからも、VBAで何かを作っていこうと思うのなら、何かVBAの入門書を読んだ方がいいよ。
0323285
2013/07/18(木) NY:AN:NY.ANレスありがとうございます。
参考に弄ってみます。
何かおすすめの書籍などありましたら教えて頂けませせんか?
質問ばかりですみません。
0324デフォルトの名無しさん
2013/07/18(木) NY:AN:NY.AN0325デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.AN0326デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.AN0327デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.AN0328デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.AN0329デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.ANshell関数はexeのみですよね?
0330デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.ANWith CreateObject("Wscript.Shell")
.Run "C:\hoge.txt", 5
End With
0331デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.ANこのクソオヤジがぁ?
0332デフォルトの名無しさん
2013/09/02(月) 21:53:12.790333デフォルトの名無しさん
2013/09/05(木) 18:05:27.91理解できてて、アクセスからデータを引っ張ってきて、エクセルに貼り付けて
そこで表計算させたり、条件にまとめて貼り付けたりとかできるんだけど。
それでこういうのを仕事にできるアルバイトしたいとおもって探してて
ネット上では、1500円とか結構高い時給でそれっぽいのの応募があったりするんだけど
そういうバイトしたことある人っています?実際どれぐらいのスキルを
求められるんだろう?
0334デフォルトの名無しさん
2013/09/05(木) 18:32:58.66電話して聞けば?
0335デフォルトの名無しさん
2013/09/05(木) 18:53:07.43ざっと探すとネットでのみ応募で電話番号がわからないところしか
見つからないんですよね。ネットで中核求人サイトを媒介にして応募して
応募した会社からの連絡待ちみたいな。
0336デフォルトの名無しさん
2013/09/06(金) 13:02:30.82そのスキルじゃ、20代女子じゃないと難しいかと。
0337デフォルトの名無しさん
2013/09/06(金) 13:45:37.41ああ、やったことあるんすか?20代女子かぁ。うーむ。男女差別って気がして
しまうなぁ。
0338デフォルトの名無しさん
2013/09/06(金) 18:00:08.99いや、無いけど>>333読む限りVBAをがっつりやるにはスキル足りなさすぎ。
0339デフォルトの名無しさん
2013/09/06(金) 18:03:28.00なるほど、もっとスキルがあれば、できるかもですな。
実際に働いたことある人の意見がききたいですが。
なかなかそういう人もいないもんなんでしょうかねぇ。
0340デフォルトの名無しさん
2013/09/06(金) 18:04:18.030341デフォルトの名無しさん
2013/09/07(土) 11:49:00.50アクセスを使う仕事はデータ入力のみか、DBの設計開発かで必要なスキルが段違いになるが、333には無理だろう
業務で使うVBA開発を前提とした仕事なら、初心者に毛が生えた程度の333では相手にされないだろう
0342デフォルトの名無しさん
2013/09/07(土) 12:03:23.48>アクセスを使う仕事はデータ入力のみか、DBの設計開発か
DBの設計開発って具体的にいうと、アクセスでテーブルを作って
用途に応じたクエリを作成する。ぐらいまでのことですか?
例えば、都道府県の各市町村で、「田」のつく名称を都道府県ごとに検出して
さらに「田」のつく市町村名の割合などを算出する。
これらをSqlとVBAを併用してエクセルに記述できたら、設計開発っていえます?
>業務で使うVBA開発
必要な用途に応じて、エクセルの中にフォームを作ったりボタンを作ってそのフォームや
ボタンを押すと必要な動作が行われる、ぐらいまでのことが注文されると作れると
VBA開発って感じになります?
0343デフォルトの名無しさん
2013/09/07(土) 12:13:27.250344デフォルトの名無しさん
2013/09/07(土) 12:18:40.43求人はあるみたいだけど、実際に働いた人の話も聞かないしなぁ。
まぁ、バイトならいつでも辞めれるし、辞めさせられるし、飛び込むだけ
飛び込んでみるのもいいかもですが。
0345デフォルトの名無しさん
2013/09/07(土) 14:25:37.30作業効率を大幅に向上させてきたけど時給900円のままのワープア派遣Orz
0346デフォルトの名無しさん
2013/09/07(土) 15:23:13.20会社側が求めている人材なんてその会社毎に違うんだから
その会社に問い合わせないとわかんないな
あーだこーだ言ってないで成果物を見せればちゃんと判断してくれるよ
0347デフォルトの名無しさん
2013/09/07(土) 15:26:56.430348デフォルトの名無しさん
2013/09/07(土) 21:42:21.69苦戦しているので、どうかお願い致します。
スペックはXPでExcelは2003です。
現在B1セルに○月1日と日付を入れ、シート名を1日としたものがあります。
これを自動で複製して、B1セル日付を○月2日 ○月3日…
シート名を2日 3日…となるように、一ヶ月分のbookを作りたいと思っています。
また、その際に、B1セルとシート名の日付が日曜・祭日に当たる場合、
シート名に色を付けたいのですが、肝心のコードが全く分かりません。
(因みにB1セルの日付はシリアル値で入れていて、
書式で○月○日と表示していて、日付が日曜・祭日に当たる場合は
赤文字になるよう、別シートに祝日リストも作って
条件付き書式で設定してあります。)
一応ウェブを漁って、それらしいコードを拾って動かしてはみたのですが
いまひとつ、作りたいものがうまく作れないので
こちらで教えていただけないでしょうか。
どうかよろしくお願いいたします。
0349デフォルトの名無しさん
2013/09/07(土) 21:54:30.330350デフォルトの名無しさん
2013/09/07(土) 22:02:50.45「テーブルを作って」を軽く見てるように思えるけど。そこがデータベースの設計の一番重要な所じゃね?
>>業務で使うVBA開発
たとえば、事務所の女の子が勝手にそれらのフォーム作ってちょっと便利なことしてたら、すげーそんなこと
できるんだ!って褒められてちょっと大事に扱ってくれるんじゃね?ってレベルのスキルだと思うよ。
0351デフォルトの名無しさん
2013/09/07(土) 22:04:16.62お前が何がわからないのかわからない
(プログラムで)しなければいけない事を細かく分けて考えて
何がわからないのか特定して、そのわからない事を書け
0352デフォルトの名無しさん
2013/09/07(土) 22:23:24.01素人がどんなに上手く料理を作れてもプロの料理人にはなれないのと一緒、やってる仕事の性質が違う
0353デフォルトの名無しさん
2013/09/07(土) 22:36:49.54レスありがとうございます。
>お前が何がわからないのかわからない
仕事で関数を使ったExcelシートを作る程度で
マクロやVBAなどの知識が全くないので
VBAそのものが全く分かりません。
なのでそれらしいコードをwebで拾ってきて使ってみたのですが
思っているものが作れなくて苦戦しています。
0354デフォルトの名無しさん
2013/09/07(土) 22:37:21.570355デフォルトの名無しさん
2013/09/07(土) 22:42:08.80B1をシリアル値で持っていると言うことは年の情報も持っていると言うことだよね?
なら、その月の1日から、翌月の1日から1日引いた日数分だけ
シートをコピーしてB1の値だけインクリメントしていく。
あとはB1セルの内容をフォーマットで変えてやって、シート名として設定して、
対象シートのB1セルと休日シートを照らし合わせて休日なら
シートを赤くすれば良いだけだと思うんだけど、ここまではいい?
0356デフォルトの名無しさん
2013/09/07(土) 22:50:05.56>>348
基礎を学んでないならコードの流用は不可能。
今現在の目的を果たすだけが目的なら丸投げして作ってもらう方がいいわな。
勉強が目的なら、いったん今の目的はあきらめて基礎から勉強したほうがいい。
0357デフォルトの名無しさん
2013/09/07(土) 23:00:37.83Excel VBA の話題なのになんでここに誘導されて来るんだよw
マクロの記録でシートを複製して出力されるコードに手を加えてみたら?
それが無理なら丸投げするしか無理だと思う
今のブックをどっかにアップしてみたら暇な誰かが作って再アップしてくれると思うよ
0358デフォルトの名無しさん
2013/09/07(土) 23:06:49.360359デフォルトの名無しさん
2013/09/07(土) 23:09:33.19すみません、分かりません…
>>356
はい、基礎を全く学んでいないので
webに落ちているコードを拾ってきて
貼り付ける程度の事しか出来ません…
なので丸投げで作って頂けたらとても助かるのですが
やはりここでは無理でしょうか…
今現在、作りたいbookが出来上がればそれで十分なのですが。
どうかよろしくお願いします。
0360桃白白
2013/09/07(土) 23:15:42.15ちょっとまってて。桃白白いまがんばってるから。
0361デフォルトの名無しさん
2013/09/07(土) 23:17:52.45あっちはこの手の質問投下すると例外無く荒れるw
0362デフォルトの名無しさん
2013/09/07(土) 23:30:13.52問題点1:シート名「1日」の複製 −>マクロの記録でコードが取得出来ます。
問題点2:変更するシート名を2日 3日にするには、DAYを使い、日付の数値だけ抽出します。
(マクロでC1セルに =DAY(B1) を登録して、そのコードを見てください。)
抽出した日付に1足して、文字列変換し、”日”を結合します。その後シート名の変更をします。
問題点3:シート名の変更方法 −> マクロの記録で・・。
問題点4:シート名の日付が日曜・祭日かの判定は出来ていて、「赤文字」にしてる様なので、
そのセルの色で if分を使って赤文字かどうかの判定を行い、赤文字ならシートの色を変更します。
(色の数値は、Cells(セル番地).Font.Color で調べられます。)
問題点5:シート名に色を付けたい −> マクロの記録で・・
問題点6:質問者の疑問には無いが、うるう年の処理(2月が何日までか)。
計算でも出来ますが、現レベルでは別シートに1〜12月の日数表を作成した方が良いかと思います。
参考URL:http://www.liveway.net/technic/20090625_111050.html の「lastDay」変数が最終日
参考 EXCELで、ある日は祝日(祝日、国民の休日、振替休日等)かを取得する関数
URL:http://www.excelio.biz/LABORATORY/EXCEL_CALENDER.html
「マクロの記録」が判らないようでしたら、ネットで検索してください。
.
VBAの構文等は http://excelvba.pc-users.net/ の様なサイトが沢山あります、それらを参考にして下さい
.
そして、どこが判らないのか、どこが思った通りにならないのかを、明確に質問してもらうと的確な解答が得られます。
。
>>357
Excel VBAスレには、嵐がいて、枝の話も幹で質問しろと嘘の誘導をしているので、>>348はある意味では被害者。
0363デフォルトの名無しさん
2013/09/07(土) 23:35:26.76・・・うわあ
0364デフォルトの名無しさん
2013/09/07(土) 23:48:21.27Sub シートコピー()
Dim dt As Date
Dim lastday As Integer
Dim i As Integer
Dim sh As Worksheet
dt = Sheets("1日").Range("B1").Value
lastday = Day(DateAdd("M", 1, dt) - 1)
For i = 2 To lastday
Set sh = Worksheets.Add(, Worksheets(i - 1))
sh.Name = CStr(i) & "日"
sh.Range("B1").Value = dt + i - 1
sh.Range("B1").NumberFormatLocal = "m月d日"
'シート見出しの色変える処理
Next
End Sub
色変えるのは、休日定義してるシートの詳細だせ
内容を理解するまで次の質問は禁止な
0365桃白白
2013/09/07(土) 23:52:21.26動きますかしら。
https://friendpaste.com/28NRpEPxYtMlJqM42y0pNW
休日判定はシートを参照したほうがいいのだけれども、どのセルに入ってるのかわからないので
とりあえずやっつけで。祝日リストのシート名と範囲と書式を教えてもらえる?
0366デフォルトの名無しさん
2013/09/08(日) 00:10:20.52Sub main()
Dim firstDay As Date
Dim lastDay As Date
Dim targetDay As Date
On Error GoTo Error_Handler
'月初日を取得
firstDay = Range("B1").Value
'月末日を取得
lastDay = DateSerial(Year(firstDay), Month(firstDay) + 1, 0)
With ThisWorkbook
'月初日のシートは既に存在しているので、
'先にシート名とシート色を設定してしまう。
Sheet1.Name = Format(.Sheets(Sheet1.Name).Range("B1").Value, "m月d日")
If .Sheets("休日").Cells.Find(firstDay, LookAt:=xlWhole) Is Not Nothing Then
.Sheet1.Tab.Color = 255
End If
0367デフォルトの名無しさん
2013/09/08(日) 00:12:41.86'ひと月分のシートをコピーし、
'シート名、シート色の設定を行う。
For targetDay = lastDay To firstDay + 1 Step -1
.Sheets(Sheet1.Name).Copy After:=Sheets(1)
.ActiveSheet.Range("B1").Value = targetDay
.ActiveSheet.Name = Format(ActiveSheet.Range("B1").Value, "m月d日")
If .Sheets("休日").Cells.Find(targetDay, LookAt:=xlWhole) Is Not Nothing Then
.ActiveSheet.Tab.Color = 255
End If
Next
End With
Exit Sub
Error_Handler:
'例外時はエラー内容を表示する。
MsgBox Err
0368デフォルトの名無しさん
2013/09/08(日) 00:16:22.53End Sub
休日シート名は「休日」固定で。
違うなら"休日"の部分だけ変えてちょ。
0369デフォルトの名無しさん
2013/09/08(日) 00:31:40.07みなさま、本当に色々とありがとうございます。
早速試させていただいたのですが
>>364
原本の1日のシートと数式を組んであったデータが消え、
日付だけが入った空のシートが複製されてしました…
>>365
「型が一致しません」と出てしまいます…
>>364
「オブジェクトが不正です」と出てしまいました…
なにがいけないんでしょうか、すみません…
0370デフォルトの名無しさん
2013/09/08(日) 00:36:10.71かんたん Visual Basic、高橋広樹、2010、技術評論社
ちょっと古いかも知れないが、この本を読んでから決めたら?
1週間で読める入門書
もちろん本屋で、より簡単な、新しい本を探すのもいい
>>348
まず、対象月の日数を、知る必要がある
28、29、30、31日?
そして、その日数分だけ、シートを作る
0371デフォルトの名無しさん
2013/09/08(日) 01:12:08.37その1
Sub main()
Dim firstDay As Date
Dim lastDay As Date
Dim targetDay As Date
On Error GoTo Error_Handler
'月初日を取得
firstDay = Range("B1").Value
'月末日を取得
lastDay = DateSerial(Year(firstDay), Month(firstDay) + 1, 0)
With ThisWorkbook
'月初日のシートは既に存在しているので、
'先にシート名とシート色を設定してしまう。
.Sheets(Sheet1.Name).Name = Format(.Sheets(Sheet1.Name).Range("B1").Value, "m月d日")
If Not .Sheets("休日").Cells.Find(firstDay, LookAt:=xlWhole) Is Nothing Then
.Sheets(Sheet1.Name).Tab.ColorIndex = 3
End If
0372デフォルトの名無しさん
2013/09/08(日) 01:13:07.76'ひと月分のシートをコピーし、
'シート名、シート色の設定を行う。
For targetDay = lastDay To firstDay + 1 Step -1
.Sheets(Sheet1.Name).Copy After:=Sheets(1)
.ActiveSheet.Tab.ColorIndex = xlNone
.ActiveSheet.Range("B1").Value = targetDay
.ActiveSheet.Name = Format(ActiveSheet.Range("B1").Value, "d日")
If Not .Sheets("休日").Cells.Find(targetDay, LookAt:=xlWhole) Is Nothing Then
.ActiveSheet.Tab.ColorIndex = 3
End If
Next
End With
Exit Sub
Error_Handler:
'例外時はエラー内容を表示する。
MsgBox Error
End Sub
0373デフォルトの名無しさん
2013/09/08(日) 01:20:34.40その1の
.Sheets(Sheet1.Name).Name = Format(.Sheets(Sheet1.Name).Range("B1").Value, "m月d日")
の行の"m月d日"のm月はいらないな。"d日"にしといて。
0374デフォルトの名無しさん
2013/09/08(日) 01:31:48.88いえ、こちらこそ何度もありがとうございます。
今、新しい方を使わせていただいたのですが
今度は「インデックスが有効範囲にありません」と出てしまいました。
>>368で言われたとおり、祝日リストのシート名を「休日」にしてあるのですが
複製もとの原本である「1日」のシート名も変えるのでしょうか?
0375デフォルトの名無しさん
2013/09/08(日) 02:00:43.30そうだね。必要ないね。その1の
.Sheets(Sheet1.Name).Name = Format(.Sheets(Sheet1.Name).Range("B1").Value, "m月d日")
の部分を取っ払えばいい。
こちらでは動いているんだけどなぁ・・・
可能性として考えられるのは1日目のシートオブジェクト名がSheet1でないことかな。
トレースでどの行でエラーが発生しているのか教えてくれれば想定付けられるんだけど・・・
0376364
2013/09/08(日) 02:42:05.75ああ、すまん。ホントにシートコピーしないとだめなのか
Set sh = Worksheets.Add(, Worksheets(i - 1))
の1行を
Worksheets("1日").Copy , Worksheets(Worksheets("1日").Index + i - 2)
Set sh = Worksheets(Worksheets("1日").Index + i - 1)
の2行にさしかえればとりあえず動くはず
0377364
2013/09/08(日) 02:49:32.23sh.Range("B1").NumberFormatLocal = "m月d日"
の行もいらんかも
0378デフォルトの名無しさん
2013/09/08(日) 03:15:10.44>>348です。
みなさま本当にありがとうございます。
とりあえず>>371さんのコードで.
Sheets(Sheet1.Name).Name のところを
.Sheets("1日").Name に変えてみたら、無事動かす事が出来ました。
ただ、ひとつだけうまくいかなかったのが
シート名の日曜の色付けが出来ませんでした。
祝日の方は、ちゃんと色付け出来てるのですが。
弄るとしたら、どこら辺を弄れば
日曜に当たるシート名を赤くする事が出来るんでしょうか。
0379デフォルトの名無しさん
2013/09/08(日) 07:04:59.03拾ってきたコードなのですが
Select Case Weekday(ActiveSheet.Range("B1").Value)
Case 1
ActiveSheet.Tab.ColorIndex = 3
Case Else
ActiveSheet.Tab.ColorIndex = xlNone
End Select
これを足してみたら、日曜に該当するシート名も
色付けする事が出来ました。
色々と教えてくださり本当に助かりました、ありがとうございました。
0380デフォルトの名無しさん
2013/09/08(日) 07:07:59.89ああ、祝日シートって言う位で、休日は設定されていないのね。
ならバグ対応も含めて、以下のものを使用して下さい。
その1
Sub main()
Dim firstDay As Date
Dim lastDay As Date
Dim targetDay As Date
On Error GoTo Error_Handler
With ThisWorkbook
'月初日を取得
firstDay = .Sheets(Sheet1.Name).Range("B1").Value
'月末日を取得
lastDay = DateSerial(Year(firstDay), Month(firstDay) + 1, 0)
'月初日のシートは既に存在しているので、
'先にシート名とシート色を設定してしまう。
'.Sheets(Sheet1.Name).Name = Format(.Sheets(Sheet1.Name).Range("B1").Value, "m月d日")
If Not .Sheets("休日").Cells.Find(firstDay, LookAt:=xlWhole) Is Nothing Or _
Weekday(firstDay) = vbSunday Then
.Sheets(Sheet1.Name).Tab.ColorIndex = 3
End If
0381デフォルトの名無しさん
2013/09/08(日) 07:09:25.61'ひと月分のシートをコピーし、
'シート名、シート色の設定を行う。
For targetDay = lastDay To firstDay + 1 Step -1
.Sheets(Sheet1.Name).Copy After:=Sheets(1)
.ActiveSheet.Tab.ColorIndex = xlNone
.ActiveSheet.Range("B1").Value = targetDay
.ActiveSheet.Name = Format(ActiveSheet.Range("B1").Value, "d日")
If Not .Sheets("休日").Cells.Find(targetDay, LookAt:=xlWhole) Is Nothing Or _
Weekday(targetDay) = vbSunday Then
.ActiveSheet.Tab.ColorIndex = 3
End If
Next
End With
Exit Sub
Error_Handler:
'例外時はエラー内容を表示する。
MsgBox Error
End Sub
0382デフォルトの名無しさん
2013/09/08(日) 07:13:30.14実行時に月初のシートが選択されていなくても
ちゃんと動くようにしました。
なんかボロボロだな・・・
0383デフォルトの名無しさん
2013/09/08(日) 07:21:56.090384デフォルトの名無しさん
2013/09/08(日) 07:42:16.50ああ、実行中に手操作で何かシートが選択された場合、
動作がおかしくなるよってことを言ってる?
なら、
On Error GoTo Error_Handlerの行の下に
Application.ScreenUpdating = Falseを、
End Withの行と、
Error_Handler:の行の下に、
Application.ScreenUpdating = Trueを
付け足しておけばいい。
画面更新がなくなるから、その方が処理も早くなるし。
0385デフォルトの名無しさん
2013/09/08(日) 08:05:10.27それしか思い付かないのはまずくね?
0386デフォルトの名無しさん
2013/09/08(日) 08:16:54.20簡単なことだ
0387デフォルトの名無しさん
2013/09/08(日) 08:45:44.43何で駄目なの?
0388デフォルトの名無しさん
2013/09/08(日) 09:42:45.980389デフォルトの名無しさん
2013/09/08(日) 10:15:48.43Activeなシートを使うみたいに他からの影響を受けないって奴だろ。
別に動作が保証されてるんならどっちでもいいよ。
むしろそういう方法でなければいけないと言う奴は
.NetフレームワークとかからExcelオブジェクトをクリエイトした時、同じ処理を.Net側からやらせたい時
どういうコードを組むのかが見もの。
0390デフォルトの名無しさん
2013/09/08(日) 11:07:35.370391デフォルトの名無しさん
2013/09/08(日) 11:27:06.300392デフォルトの名無しさん
2013/09/08(日) 12:19:00.08.NETから呼ぶと何か変わるの?
0393デフォルトの名無しさん
2013/09/08(日) 13:14:07.520394デフォルトの名無しさん
2013/09/08(日) 15:42:01.880395デフォルトの名無しさん
2013/09/08(日) 16:37:53.610396デフォルトの名無しさん
2013/09/08(日) 17:07:00.51nextでエラーになってしまいます。
ネットで拾ったもので自分ではさっぱりわかりません。。
誰か助けていただけますでしょうか?
大量のシートの不要行に"1"を立てて非表示化させるマクロです。
Sub macro1()
On Error Resume Next
Dim w As Worksheet
For Each w In Worksheets
w.AutoFilterMode = False
w.Range("Am:Am").AutoFilter field:=1, Criteria1:="<>1"
Next
End Sub
0397デフォルトの名無しさん
2013/09/08(日) 17:18:26.74ハード-ディスクの内容がすべて消去される可能性のあるコードを実行する気があるのかな?
全くコードを知らないというのはそういうリスクを背負ってることも理解する必要はある。
0398デフォルトの名無しさん
2013/09/08(日) 17:26:47.88せめて、どういうエラーがでたかぐらい書け
つか、On Error Resume Nextでエラーでるか?
0399デフォルトの名無しさん
2013/09/08(日) 17:38:06.66On Error Resume Nextはエラー無視の暴走モードですよね?
これで動いてたんですが。。
コードの実行が中断されました というダイアログがでて、
デバックを押すとnextが黄色になっています。
継続を押すと次のシートの処理に移行し非表示は実行されますが、
100シート以上あって繰り返し実行するにはちょっと。。
0400デフォルトの名無しさん
2013/09/08(日) 17:40:30.780401デフォルトの名無しさん
2013/09/08(日) 17:50:07.72こっちじゃ再現しないからわからんけど
コードの実行が中断されました
でググるとなんか情報あるね
0402デフォルトの名無しさん
2013/09/08(日) 17:55:03.18ググってみます
パッと見たところこれという解決策が。。
って感じみたいです。
もちょっと見てます
0403デフォルトの名無しさん
2013/09/08(日) 18:07:17.76再現しないな
中断されたあと、継続押したらまたNextで止まるのか?
Breakキーの上になんか乗ってないか
0404396
2013/09/08(日) 18:13:03.97ググってたらPCの問題かもと思い、
念のため別のPCに移したらエラー出ず無事実行出来ました。
なんかPCにごみが出来ちゃったのかしら。。
コードの問題じゃないことがわかりまして、
みなさん大変お騒がせしてすみっませんでした。
0405デフォルトの名無しさん
2013/09/08(日) 18:52:21.090406デフォルトの名無しさん
2013/09/08(日) 18:59:55.590407デフォルトの名無しさん
2013/09/08(日) 19:03:27.820408デフォルトの名無しさん
2013/09/08(日) 20:23:00.90以下のようなコードができたのですが、IEウィンドウが複数開いているとうまくいきません。
最も最新に開いたウィンドウに対して以下の操作を行いたいのですが、
ヒントでもいいので教えてください。
一応ググってはみましたが、自分の書いたコードにはうまく組み込めず困っています。
Dim IE
Dim Word As String
Word = "****"
With CreateObject("Shell.Application")
For Each IE .Windows
On Error Resume Next
If TypeName(IE.Document) = "HTMLDocument" Then
On Error GoTo 0
IE.Document .all . Item("ID") .Value = Word
Application .Wait (Now + TimeValue("0:00:03"))
Exit Sub
End If
Next
End With
End Sub
0409デフォルトの名無しさん
2013/09/08(日) 20:53:58.780410デフォルトの名無しさん
2013/09/08(日) 21:24:56.46タイトルとかURLとかで特定した方がいいんじゃない?
0411デフォルトの名無しさん
2013/09/08(日) 23:04:56.05手動でそのページを開いてから、以下のような感じで一番後ろのIEと決め付ける方法で捕捉しようとしているのですが・・・
Dim IE
Dim NewIE
Dim Word As String
Word = "****"
Set IE = CreateObject("Shell.Application")
Set NewIE = IE.Windows(IE.Windows.Count - 1)
For Each NewIE .Windows
On Error Resume Next
If TypeName(NewIE.Document) = "HTMLDocument" Then
On Error GoTo 0
NewIE.Document .all . Item("ID") .Value = Word
Application .Wait (Now + TimeValue("0:00:03"))
Exit Sub
End If
Next
End With
End Sub
0412デフォルトの名無しさん
2013/09/08(日) 23:33:24.25URLが変わるったって、ホスト名とかパスは変わらないんじゃないの?
0413デフォルトの名無しさん
2013/09/09(月) 00:05:09.46Shell.Applicationの順番って必ずウィンドウを開いた順になるのかな?
もしそうならFor Eachで最後まで回せば取れるけど
確実じゃない気がするからやっぱりURLとかで特定したいところ
Set IE = CreateObject("Shell.Application")
For Each w In IE.Windows
If TypeName(w.Document) = "HTMLDocument" Then Set NewIE = w
Next
0414デフォルトの名無しさん
2013/09/09(月) 08:28:02.890415デフォルトの名無しさん
2013/09/09(月) 11:03:01.30Wordに貼り付けるというマクロを組みたいです。
もちろん表の大きさに応じて、Wordの何ページ目のどこに貼るかというのもVBAでコードを組んで自動処理したいです。
そのために「覚えるべきこと」は何ですか?
この目的に沿う「本」や「Web解説サイト」はどこですか?
0416デフォルトの名無しさん
2013/09/09(月) 11:24:55.39>そのために「覚えるべきこと」は何ですか?
礼儀作法
0417415
2013/09/09(月) 11:26:14.610418デフォルトの名無しさん
2013/09/09(月) 11:26:27.75オフィスの達人〈5〉VBA活用術―Excel/Word/Access/PowerPoint/Outlook Office 2003対応 (オフィスの達人 (5)) [単行本]
http://www.amazon.co.jp/%E3%82%AA%E3%83%95%E3%82%A3%E3%82%B9%E3%81%AE%E9%81%94%E4%BA%BA%E3%80%885%E3%80%89VBA%E6%B4%BB%E7%94%A8%E8%A1%93%E2%80%95Excel-Access-PowerPoint-Outlook-%E3%82%AA%E3%83%95%E3%82%A3%E3%82%B9%E3%81%AE%E9%81%94%E4%BA%BA/dp/4839916055
とかか
0419415
2013/09/09(月) 11:28:38.31それは下で質問したけど、中古でも値段が高騰しすぎて困っています。
http://toro.2ch.net/test/read.cgi/tech/1376371376/323
もっと安い、あるいは最新の本はないですか?
0420デフォルトの名無しさん
2013/09/09(月) 15:25:19.01値段が高騰するのは、その本に需要があるから
裏返せば、代わりになるような本がない
0421デフォルトの名無しさん
2013/09/09(月) 18:31:50.30桃白白、出番だぞ
0422デフォルトの名無しさん
2013/09/09(月) 21:25:21.820423デフォルトの名無しさん
2013/09/09(月) 22:48:13.94MSDNライブラリだと何が不足なの?
0424デフォルトの名無しさん
2013/09/10(火) 22:30:20.32outlookの送信確認マクロを組んでて、ネットで調べた所
Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
For Each Mailto In Item.Recipients
CCList = CCList & Mailto.Address & vbCr
Next Mailto
MSGText = “題名:「” & Item.Subject & “」” & vbCr & “下記が送信予定アドレスです。”
& vbCr & CCList & “送信してもよろしいでしょうか?” & vbCr
If MsgBox(MSGText, vbExclamation + vbYesNo) = vbNo Then
Cancel = True
End If
End Sub
ってマクロで”送信相手のアドレス”と”件名”を表示させることは出来るんだが、
0425424
2013/09/10(火) 22:31:49.40複数アカウントでメールを送信させてて、
「***@****というアドレスから送ります」
ってな感じの記述を加えたいんだ
上の記述から「Mailto.Address」を「Mailfrom.Address」に変えたらいけるかなー
と思ったんだが無理っぽい。
だれかわかる人いるかな?
0426デフォルトの名無しさん
2013/09/10(火) 23:50:22.23発信者アドレスの偽装って事?
だとしたら、だれも答えないと思うよ。
なぜって、「オレオレ詐欺」以上に危険な「オレオレ メール」に応用可能。
0427424
2013/09/11(水) 00:05:13.18言い方が悪かった・・偽装でもなんでもないんだ。
複数アカウントを登録していて、
現状、Aアドレス、Bアドレスから送信することが出来る状態なんだ。
何も考えずに送信を押すとデフォルト(仮にAアドレス)のアカウントから送信してしまい、
送信する際に
「Aアドレスから送りますがよろしいですか?」
みたいなメッセージボックが出てくれたらいいな、と思ってるんだ
リファレンスとかで調べると”宛先””CC””BCC"の表示はできるっぽいけど”FROM”の表示については書かれて無くて・・・
0428デフォルトの名無しさん
2013/09/11(水) 02:25:18.40「MailItem.SendUsingAccount」プロパティ が使えそう、Outlook無いので検証出来ず。
『MailItem の送信に使用するアカウントを表す Account オブジェクトを設定します。値の取得および設定が可能です。』
だそうです。
0429デフォルトの名無しさん
2013/09/11(水) 04:19:22.15せめてコードが何やってるか理解してから改変しようぜ
送信者のアドレス出すだけなら
If MsgBoxの前に、
MSGText = MSGText & "「" & Item.SenderEmailAddress & "というアドレスから送ります」"
を追加すれば行けるんじゃないかな
0430デフォルトの名無しさん
2013/09/22(日) 11:46:30.95シートに直接設定したコンボボックスについて、以下の処理をしたいです。
1.まず選択したセルの値によってコンボボックスの中身(リスト)を
変更する
2.次にコンボボックスでの選択をしたときに、その値を取得する方法
(1.で選択したセルの右セルに表示させたいのです)
どのイベントを使えばいいのか分からず、どうもうまく行きません。
何かヒントを頂けますか?
0431デフォルトの名無しさん
2013/09/22(日) 11:56:27.891.ワークシートのSelectionChangeイベント
2.コンボボックスのClickイベント
0432デフォルトの名無しさん
2013/09/22(日) 20:58:39.16>>430は入力規則で作ったコンボボックス(ドロップダウンリスト)のような気がする。
そうだとしたら、イベント引っ掛けるならWorksheet -> Changeじゃね?
2.なんてあったっけ?
0433430
2013/09/23(月) 16:20:18.65レスありがとうございます。
0434430
2013/09/23(月) 16:25:14.81設定しました。
0435デフォルトの名無しさん
2013/09/23(月) 23:17:31.31ありがとうございました
0436デフォルトの名無しさん
2013/10/01(火) 08:27:31.37[Folder01]
img001.jpg
img002.jpg
img003.jpg
img004.jpg
img005.jpg
・
・
[Folder02]
img001.jpg
img002.jpg
img003.jpg
img004.jpg
img005.jpg
・
・
[Folder03]
img001.jpg
img002.jpg
img003.jpg
img004.jpg
img005.jpg
・
・
[Folder04]
・
・
0437436
2013/10/01(火) 08:28:14.80これを前フォルダの最後のjpgファイルの番号の次の番号から、次のフォルダのjpgファイルの番号を始めたいのです。
フォルダとファイルはたくさんあります。(フォルダは50くらい、各フォルダにファイルは30くらい)
どういうコードを書けばいいですか?
0438デフォルトの名無しさん
2013/10/01(火) 08:42:24.310439436
2013/10/01(火) 08:45:51.91なるほど、すばらしいですね!
ところでそれってどういうコードをかけばよいのでしょう?
0440436
2013/10/01(火) 08:46:47.270441デフォルトの名無しさん
2013/10/01(火) 11:47:07.85お前、Excel VBA 質問スレ Part31
で紹介したリンク先を見た上でいってるんだろうな?
そこを参照すれば出来るはずだろ?
それすらも理解できない?
0442436
2013/10/01(火) 11:59:06.04出来ないから聞いておるのだ
>>みなさま
どなたかわかるかたはいらっしゃらないでしょうか?
0443デフォルトの名無しさん
2013/10/01(火) 12:48:43.47素直にコードが欲しいと言えばいいのにwww
0444デフォルトの名無しさん
2013/10/01(火) 14:29:08.15アホか
何様のつもりだよガキが
0445デフォルトの名無しさん
2013/10/01(火) 14:58:20.500446デフォルトの名無しさん
2013/10/01(火) 16:11:06.71それをやりたかったら回答料寄こせや
1レス1万でいいぞw
0447デフォルトの名無しさん
2013/10/01(火) 16:29:25.32> 何様のつもりだよガキが
荒らさないでくれるかな。
0448デフォルトの名無しさん
2013/10/01(火) 16:40:50.01> 出来ないから聞いておるのだ
これを吐いた時点でお前の居場所はない
今更話をそらして逃げようとしても遅い
0449デフォルトの名無しさん
2013/10/01(火) 16:51:48.60擬似コードだとこんな感じ。再帰使えそう。
sub foo()
folders = get_all_folders(path)
folders.sort
' 最初のフォルダの最終番号を取得する
last_file_name = get_last_file_name(folders(i))
last_number = parse_file_name(last_file_name)
' 次のフォルダの開始番号を計算する
first_number = last_number + 1
' 二個目以降のフォルダ内のファイルを全てリネーム
for i = 1 to folders.size - 2
first_number = rename_files(folders(i + 1), first_number)
next
end sub
function rename_files(folder, first_number) as string
files = get_all_files_of_folder(folder)
files.sort
current_number = first_number
for i = 0 to files.size - 1
rename files(i), build_file_name(current_number)
current_number = current_number + 1
next
rename_files = current_number
end sub
0450デフォルトの名無しさん
2013/10/01(火) 16:53:06.38誤:last_file_name = get_last_file_name(folders(i))
正:last_file_name = get_last_file_name(folders(folders.size - 1))
0451デフォルトの名無しさん
2013/10/01(火) 16:54:06.28正: last_file_name = get_last_file_name(folders(0))
0452デフォルトの名無しさん
2013/10/01(火) 16:54:58.550453デフォルトの名無しさん
2013/10/01(火) 17:42:42.63|___ミ ギビシッ
.|| ヾ ミ 、 グシャッ
∩_∧/ヾヽ
| ,| ゚∀゚). .| |;, ゲシッ
/ ⌒二⊃=| |∵.
.O ノ %`ー‐'⊂⌒ヽ ゴショッ
) ) ) )~ ̄ ̄()__ )
ヽ,lヽ) (;;;;;;;;;;;;;;;;;)(_(
0454桃白白 ◆9Jro6YFwm650
2013/10/04(金) 06:12:18.01ソートといったらバブルソート、バブルソートといったら桃白白、
桃白白はかわいい、ゆえに桃白白はかわいい。証明終了。
>>442
桃白白もやってみるのだ。ちょっと待っててくれればいいのだ。
0455デフォルトの名無しさん
2013/10/04(金) 10:39:31.16胸が熱くなるな
0456桃白白 ◆9Jro6YFwm650
2013/10/04(金) 23:01:49.33とーなりどーしあなたとあたしたおぱいぱーい♪
>>442
できたのだ。
https://friendpaste.com/3Tm2uY4MkIuhJLIGoaCK6D
0457デフォルトの名無しさん
2013/10/05(土) 00:41:02.96Folder = "C:\images" ' このパス以下を処理
Files = "img???.jpg" ' 処理するファイル名
ChDir Folder
Set WSH = CreateObject("WScript.Shell")
sCmd = """dir /s /b """"" & Files & """"" 2> nul | sort""" ' ファイルの一覧をソート
Set wExec = WSH.Exec("%ComSpec% /c " & sCmd)
Do While wExec.Status = 0 ' コマンドの終了待ち
DoEvents
result = result & wExec.StdOut.Read(100) ' バッファあふれ対策
Loop
result = result & wExec.StdOut.ReadAll ' ソート済みの一覧を取得
D = Split(result, vbCrLf) ' 一覧を改行で区切って配列に
counter = 1 ' ここから連番リネーム処理
For i = LBound(D) To UBound(D) - 1 ' リストの末尾にも改行があるので1つ減らす
NewName = Left(D(i), Len(D(i)) - 7) & Format(counter, "000") & ".jpg" ' 超手抜き注意
Name D(i) As NewName
Debug.Print i, D(i), NewName ' 確認
counter = counter + 1
Next
End Sub
0458デフォルトの名無しさん
2013/10/05(土) 00:43:34.39>>457は無し
書き込んだ瞬間に大きなバグに気付いた
0459デフォルトの名無しさん
2013/10/05(土) 00:54:05.80' ここから連番リネーム処理
For i = UBound(D) - 1 To LBound(D) Step -1 ' リストの末尾にも改行があるので1つ減らす
NewName = Left(D(i), Len(D(i)) - 7) & Format(i + 1, "000") & ".jpg" ' 超手抜き注意
Name D(i) As NewName
Debug.Print i, D(i), NewName ' 確認
Next
End Sub
0460デフォルトの名無しさん
2013/10/05(土) 03:13:58.77○ num = 0
× num = 1
0461デフォルトの名無しさん
2013/10/05(土) 03:14:35.26>>456
○ num = 1
× num = 0
0462デフォルトの名無しさん
2013/10/05(土) 03:15:59.180463デフォルトの名無しさん
2013/10/05(土) 03:44:35.42各フォルダのThumbs.dbが巻き込まれて全部jpgにリネームされたんだけど
0464デフォルトの名無しさん
2013/10/05(土) 08:05:51.30糞コードがあまりにも多いのか。基本中の基本だろうが。
0465デフォルトの名無しさん
2013/10/05(土) 08:22:43.71現場に進言すればいいじゃん。
0466デフォルトの名無しさん
2013/10/05(土) 19:21:00.770467桃白白 ◆9Jro6YFwm650
2013/10/05(土) 23:34:19.45修正した。Σd(゚∀゚)グッジョブ!!
>>463
えーそれは困るよじゃあここをこう修正したらいいよとかそういう提案ある?
桃白白お耳傾けちゃう。
0468デフォルトの名無しさん
2013/10/06(日) 09:21:31.54一から書いた方が早い
0469桃白白 ◆9Jro6YFwm650
2013/10/06(日) 09:54:54.10困ることはないでしょう。その中からこれがベストだっていうのをひとつ選べばいいだけなんだから。
恋人選ぶのとはちがうんだよ。教えてよ。
0470デフォルトの名無しさん
2013/10/06(日) 10:22:04.15ベストだって言うキャラのを一つ選んで。
0471桃白白 ◆9Jro6YFwm650
2013/10/06(日) 10:53:00.49まあほんとに書けるんだったらとっくに書いてなきゃおかしいわけで
できもしないくせに見栄張っちゃったってところかな。
0472桃白白 ◆9Jro6YFwm650
2013/10/06(日) 10:54:29.470473デフォルトの名無しさん
2013/10/06(日) 13:22:21.85というより本人じゃないやつが成りすましてる可能性が非常に高い。
俺の知ってる桃白白はコードなんか書かなくて、もっと紳士な奴なんだが。
本人に失礼だからいい加減成りすましやめたら?
0474デフォルトの名無しさん
2013/10/06(日) 13:45:02.42ピラフは生理キャラでOK?
0475デフォルトの名無しさん
2013/10/08(火) 23:01:07.19エクセルと違って少ないですよね
0476デフォルトの名無しさん
2013/10/08(火) 23:09:26.96このスレは間口広いから大丈夫のはず
0477デフォルトの名無しさん
2013/10/08(火) 23:11:48.37何がですか?
0478デフォルトの名無しさん
2013/10/08(火) 23:24:58.30今、WORDファイルの結合マクロを作ろうと考えているのですが
1つ目のファイル(名前.dot)の内容
[001] cat
[002] dog
[003] monkey
2つ目のファイル(b.dotx)の内容
(001) ねこ
(002) いぬ
(003) さる
のようになっています
これを
[001] a.docx cat
(001) b.dox ねこ
[002] a.docx dog
・・・
のように、ファイル名を付けて並び替えて1つのファイルにしたいのです
何かサンプルなどないでしょうか。
本物はもっと長文で、書式や校正履歴が有るために
エクセルでセルに張り付けてソートという方法が使えないのです
おねがいします
0479デフォルトの名無しさん
2013/10/08(火) 23:39:36.620480デフォルトの名無しさん
2013/10/09(水) 00:12:34.20まず、何がわからないの?
ExcelのVBAは使える?
0481デフォルトの名無しさん
2013/10/09(水) 00:42:34.73あまり使えないです
乱数発生してランダムにソート?とか
文字列の置換、取り出し(Left、Right、Mid)、変換(StrConv)とかくらいならなんとか
C、C++とかは少しだけ出来たんですが(MFCはわからないのでWin32APIで)
なんだかVBって記号的というか関数名とか変な感じでよく読めないです
やろうとしたのは、まずファイルa.doxから
Selection.MoveEndUntil Cset:="[",
Count:=wdForward
みたいにして、[の前までを選択してファイルの一番上にコピペ
次はb.dox(の前までを選択してファイルの一番上にコピペ
これを交互に繰り返せば行けるのではないかと思ったのですが…
0482デフォルトの名無しさん
2013/10/09(水) 00:58:59.94b.dotx
a.docx
b.dox
訳がわからん
0483デフォルトの名無しさん
2013/10/09(水) 01:01:11.58a.dox
ってのも追加か
0484デフォルトの名無しさん
2013/10/09(水) 20:28:46.52WordのVBAはあまり使わなかったが、下の様なフローで出来た、Word2007使用。
1:文書a.docxを開く、全文を変数に代入、文書a.docx閉じる、各行に分割し配列に記録
2:文書b.docxを開く、同上
3:VBA入りの結合用ファイルをアクティブに
4:配列上で各行に分割
5:カッコの位置を工夫し、ファイル名を入れた物をWordに書き出し
6:Word上で、ソート
7:Word上で、各行のカッコの位置を戻す
WordのVBAは、慣れていないから難解。
0485デフォルトの名無しさん
2013/10/09(水) 20:37:56.640486484
2013/10/09(水) 20:43:02.94あぁ勘違いでした。
0487484
2013/10/09(水) 23:16:42.80Wordは変な癖が有るし、いゃ〜めんどくさい、WordのVBAなんかもう触りたくない。
でもいい勉強になった。
0488デフォルトの名無しさん
2013/10/09(水) 23:44:09.07余り好きじゃない。
0489デフォルトの名無しさん
2013/10/16(水) 08:28:03.32コマンドボタンを直接エクセル画面に貼り付け➡コマンドボタンのプロシージャにプリントアウトのプログラムを記入➡コマンドボタンをクリック➡コマンドボタンが左側にかってに移動(プリントアウトは出来る)
コマンドボタンが左側に移動しない方法を教えて下さい。
0490デフォルトの名無しさん
2013/10/16(水) 09:38:11.85普通の「→」を使わないのが気に障るから教えない
0491デフォルトの名無しさん
2013/10/16(水) 13:43:15.140492デフォルトの名無しさん
2013/10/16(水) 13:48:09.87いまさらそんなの使えるようになっても食っていけないよ。
0493デフォルトの名無しさん
2013/10/16(水) 18:27:10.73お前は早く普通の→を入力できるように頑張れよw
0494デフォルトの名無しさん
2013/10/16(水) 18:55:25.96最初に出るね。➡︎。
0495デフォルトの名無しさん
2013/10/16(水) 21:51:27.03そういうマシンに心酔するユーザも嫌い。
0496ピラフ
2013/10/20(日) 02:37:44.24ピラフのことは?好き?
0497デフォルトの名無しさん
2013/10/20(日) 02:45:46.580498デフォルトの名無しさん
2013/10/20(日) 06:02:53.70ひと波乱あった今のEXCELVBAスレなら書き込むと荒れるかもしれないけど意外に有難がられるかもしれない
0499デフォルトの名無しさん
2013/10/21(月) 00:45:14.120500デフォルトの名無しさん
2013/10/22(火) 18:20:53.28Aセルの中に、東京都千代田区永田町1-7-1と入力されてます。
Aセルの中にある数字だけを抽出する事は可能でしょうか?(Bセルに1 Cセルに7 Dセル1)
可能であれば、マクロ組んでいただけませんか?
0501デフォルトの名無しさん
2013/10/22(火) 19:36:40.310502デフォルトの名無しさん
2013/10/22(火) 20:40:01.55Range("B1")=1
Range("C1")=7
Range("D1")=1
0503500
2013/10/22(火) 20:40:34.13Aセルの中の数字は、3つだけとは限りません。
「東京都千代田区大便町1-2-3-101」みたいに4つのこともありますし、
0個のときも、1個のときも、2個のときも、5個以上のこともあります。
さあ、お願いいたします。
0504ピラフ
2013/10/22(火) 20:42:51.33ピラフ挑戦してみようかな
4つ目の数字はEセルってことでいいの?
0505デフォルトの名無しさん
2013/10/22(火) 20:52:19.98478です
お返事遅くなり申し訳ありません。
レスありがとうございます。
事故に遭い、レスをすることが出来ませんでした
皆様も車にはお気をつけて。
0506デフォルトの名無しさん
2013/10/22(火) 21:02:14.04それ、難易度の変化無いです。
つか>>500本人とは思えんww
0507デフォルトの名無しさん
2013/10/22(火) 21:19:32.45ちょっと前にEXCEL VBAのスレで似た様な質問が挙がってたね。
0508500
2013/10/22(火) 21:43:36.77住所の数字が増えた場合は、EセルFセルと右に移動できたらと思います。
よろしくお願いします。
0509506
2013/10/22(火) 21:51:51.730510デフォルトの名無しさん
2013/10/22(火) 22:00:03.49塊全部でひとつなのだから
0511ピラフ
2013/10/22(火) 22:00:28.83動きますかしら
https://friendpaste.com/1IJsAt4r0u4ESjQuNgDXLE
0512デフォルトの名無しさん
2013/10/23(水) 03:14:08.82なんのために番地をバラバラにするのか
漢数字には対応しなくていいのか
本当は処理したいのは住所じゃないと見た
0513デフォルトの名無しさん
2013/10/23(水) 04:45:42.24今だとA列にセルは100万個ぐらいあるんだがなぁ
0514デフォルトの名無しさん
2013/10/23(水) 08:19:36.09マジで言ってんのか
馬鹿じゃないのか…
0515デフォルトの名無しさん
2013/10/23(水) 08:36:05.32ピラフちゃん好きだよ
0516デフォルトの名無しさん
2013/10/23(水) 08:59:22.900517デフォルトの名無しさん
2013/10/23(水) 10:48:12.660518デフォルトの名無しさん
2013/10/23(水) 11:37:44.4725万件で1分55秒、50万件で3分33秒(シングルコア、画面更新・再計算停止)
A列全ての1048576件はこれ以上と思うので試してない。
0519500
2013/10/23(水) 15:33:24.66カス共サンクス
0520デフォルトの名無しさん
2013/10/23(水) 17:45:21.390521ピラフ
2013/10/23(水) 19:59:57.25なん・・・だと・・・
0522デフォルトの名無しさん
2013/10/23(水) 20:04:49.420523デフォルトの名無しさん
2013/10/23(水) 20:16:17.55ここのスレでもいいけど、
EXCELのVBAに関してはこっちの方が賑わっているから
返事も早いし色んな人の意見が聞けると思うよ。
Excel VBA 質問スレ Part32
http://toro.2ch.net/test/read.cgi/tech/1381151717/
0524デフォルトの名無しさん
2013/10/23(水) 20:20:30.14とりあえずマクロの記録ってのを試してみよう。それが判らないってんでは話にならん
0525デフォルトの名無しさん
2013/10/23(水) 20:24:21.16自演で賑わってるように見えるだけでしょ。
>>522はクレクレ君のようだからそっちでいいと思うけど。
本スレはこっち
Excel VBA 質問スレ Part32
http://toro.2ch.net/test/read.cgi/tech/1381151995/
0526デフォルトの名無しさん
2013/10/23(水) 20:33:33.230527デフォルトの名無しさん
2013/10/23(水) 20:39:08.22行ってみましたが、何故本スレなのに10レスしか付いていないんでしょうか?
0528デフォルトの名無しさん
2013/10/23(水) 21:00:15.81元々過疎スレだから。
コード作成依頼スレは自演してるからレス数が多くついてるだけ。
実際スレの中で自演してるって認めてるし。
http://toro.2ch.net/test/read.cgi/tech/1381151717/92
92 返信:デフォルトの名無しさん[sage] 投稿日:2013/10/17(木) 21:17:20.32
>>91
ここまで全部俺の自演でもいいから
とっとと自分の立てた糞スレに帰りなさい。
羨ましそうに荒らしに来ない様に。
因みに過去スレが見れるのならテンプレを見れば
こっちが本スレなのが分かると思うけど。
Excel VBA 質問スレ Part32
http://toro.2ch.net/test/read.cgi/tech/1381151995/
0529デフォルトの名無しさん
2013/10/23(水) 21:08:19.13過去スレみて大体状況が分かりました。
何故レスが少ないのかも理解しました。
ありがとうございました。
0530デフォルトの名無しさん
2013/10/23(水) 21:14:56.550531デフォルトの名無しさん
2013/10/28(月) 08:01:59.06(1)すでにあるページがひらいてるか調べる
(2)もしひらいていたらそのページをアクティブにして前面に出し、そうでなければ新しく開く
という手順を実行したいです。
苦労してるのは、InternetExplorerというブラウザを使っているのですが
そのタブ機能があるのでブラウザは1個だけどその内部にタブが複数開いてるのを
どうアクティブにするかで悩んでいます。
どうかよろしくお願いします
0532デフォルトの名無しさん
2013/10/28(月) 16:28:16.090533デフォルトの名無しさん
2013/10/28(月) 18:17:37.88タブを複数開いていてもプロセスはタブごとに個別にあるよ
0534531
2013/10/28(月) 23:01:50.31なるほどぉ。
ありがとぅ。
でも該当のやつをアクティブに、つまり前面に出すにはどうやるの?
0535デフォルトの名無しさん
2013/10/28(月) 23:12:22.77今どこまでできてんのか見せてみて
0536デフォルトの名無しさん
2013/10/29(火) 00:08:08.87しらね
IEのオブジェクトをFor Eachでとれるんじゃね?
それかOSレベルでのプロセス見つけてアクティベートとかできるんじゃね?
しらねしらねー
0537デフォルトの名無しさん
2013/11/02(土) 23:27:43.690538ピラフ
2013/11/02(土) 23:35:26.33いんじゃない。書いちゃいなよ。
0539デフォルトの名無しさん
2013/11/02(土) 23:47:49.12ソースは
http://memopa.applest.net/d/112d26e7d487c3c35f
に
内容は
このマクロがあるフォルダにあるlzh圧縮ファイルを解凍し、出来たフォルダが xxxx なら それに " old" を付加しもう一つ xxx を作るというものです
解凍処理そのものは いろんなサイトで見てwなんとか出来たんですが、時たま(これが?なんですが)UNLHAが動作中ですというメッセージを
出して落ちてしまうことがあります。
んでUNLHAのドキュメントでは UnlhaGetRunningとかで動作確認をするとか。これをVBA上で実現する方法をしりたいのですが。
↑に貼ったソースでは該当部分はコメント化してあります。
'Public Declare Function UnlhaGetRunning Lib "UNLHA32.DLL" Alias "Unlha" () As Boolean
'If UnlhaGetRunning() Then
' MsgBox "UNLHAが現在動作中 一旦このブックを閉じて再度実行してください"
' Exit Sub
'End If
の部分です
0540デフォルトの名無しさん
2013/11/03(日) 02:02:16.59UNLHA32.DLL は複数同時実行に対応していないんだから、
調子に乗って連続で実行してる時とかに間に合わなくて普通にExitしてるんだろ
適当にループでもさせとけば?
0541デフォルトの名無しさん
2013/11/03(日) 08:18:57.49レスありがとです。unlha32.dllはスレッドセーフではないっていうことですよね。
で、その「適当にループさせる」ってのは具体的にはどういうことなんでしょうか
0542デフォルトの名無しさん
2013/11/03(日) 08:37:12.78使ってないからよくわからんが引数とか戻り値の型とか違うんだけど?
http://www31.ocn.ne.jp/~heropa/vb05.htm
0543デフォルトの名無しさん
2013/11/03(日) 11:51:58.89api定義の部分はさすがに同じだと思うのですが…
後、引数については、、取り敢えずあとで見返してみます^^;
自分のソースの
'UNLHA32.DLL呼出API
Public Declare Function UNLHA Lib "UNLHA32.DLL" Alias "Unlha" _
(ByVal hwnd As Long, ByVal szCmdLine As String, _
ByVal Lpstr As String, ByVal wsize As Long) As Long
Dim lngRet As Long
http://www31.ocn.ne.jp/~heropa/vb05.htm
Declare Function Unlha Lib "UnLHA32.DLL" _
(ByVal hwnd As Long, _
ByVal szCmdLine As String, _
ByVal szOutput As String, _
ByVal dwSize As Long) AS Long
Dim lngResult As Long
0544デフォルトの名無しさん
2013/11/03(日) 12:06:57.35はあ? >>539 は自分のソースじゃないのか?
悪いけど、抜けるわ。
0545デフォルトの名無しさん
2013/11/03(日) 16:10:28.85俺は>>540じゃないけど
スレッドセーフって意味わかってる?
今までの情報ではunlha32.dllがスレッドセーフかどうかは判断できない
適当にループさせるってのは、何も考えなければ
実行中の状態が実行中で無くなるまで、ひたすら実行中かどうかをチェックするってことだ
極端に言えばこんな感じ
Do While UnlhaGetRunning()
Loop
実際には時間切れとかシステムの占有率とか考えないとダメかもしれんが
0546デフォルトの名無しさん
2013/11/03(日) 17:07:50.83情報不足ですいません
Unlhaがスレッドセーフでないってのは、unlha32.dllの作者である人がそのAPI 説明ファイルの冒頭で
UNLHA32.DLL はスレッド・セーフではありません。(^^;)
従って, 複数スレッドからの同時使用は行えませんので
注意してください。
と書いているんで、そうなのですかということで。
0547デフォルトの名無しさん
2013/11/03(日) 18:21:28.23作者がそう言ってるのならそうでしょう
そもそもVBAはシングルスレッド前提の言語なんで、VBAで複数スレッドから同時に使用するのは大変ですが
0548537
2013/11/04(月) 21:38:21.65Public Declare Function UnlhaGetRunning Lib "UNLHA32.DLL" Alias "Unlha" () As Boolean
↓
Public Declare Function UnlhaGetRunning Lib "UNLHA32.DLL" () As Boolean
で
If UnlhaGetRunning() = True Then
MsgBox "UNLHA動作中"
Exit Sub
Else
MsgBox "test **** UnlhaGetRunningの動作確認 UNLHAはFALSE ****"
End If
ではtest **** UnlhaGetRunningの動作確認 UNLHAはFALSE ****が表示され、以下の処理も正常に終了
これで正しいのかどうか不安には思いながらも取り敢えずお終い
0549デフォルトの名無しさん
2013/11/22(金) 15:38:59.33ファイル名が「@@file.xls」のようにアットマークで始まるファイルが
圧縮できません。
strCommand = "-u ""file.zip"" ""@@file.xls"""
lngSize = Len(str)
RC = Zip(hwnd, strCommand, str, lngSize)
ざっくり書くとこんな感じでZip32jに渡しているのですが、
こういう場合はZip32jにどういう風にファイル名を渡せば
良いのでしょうか。
0550デフォルトの名無しさん
2013/11/22(金) 18:15:51.320551デフォルトの名無しさん
2013/11/22(金) 18:31:02.890552デフォルトの名無しさん
2013/11/22(金) 18:31:42.410553デフォルトの名無しさん
2013/11/22(金) 20:35:05.460554デフォルトの名無しさん
2013/11/22(金) 20:39:15.370555555
2013/11/22(金) 20:40:13.160556デフォルトの名無しさん
2013/11/25(月) 17:34:43.29Set res = Rows(1).Find(What:="2013")
これでオブジェクトが必要です。とエラーが出てしまうのですが、原因わかる方いますか?
検索結果がない可能性があるので、この後resのNothing判定をする予定です。
0557デフォルトの名無しさん
2013/11/25(月) 17:45:00.48この1行ならエラー出なかったょ
他でエラー発生してるんじゃない?
0558デフォルトの名無しさん
2013/11/25(月) 17:56:44.97Findの罠だな
これで動くこともあるからタチが悪い
面倒でも検索条件を省略せずにきちんと書いてみ
0559デフォルトの名無しさん
2013/11/25(月) 17:57:01.51Dim res の記述はどうなってる?
'Dim res As Integer 'オブジェクトが必要です エラー
'Dim res As Single 'オブジェクトが必要です エラー
'Dim res As Double 'オブジェクトが必要です エラー
'Dim res As String 'オブジェクトが必要です エラー
を再現した。 By 557
0560デフォルトの名無しさん
2013/11/25(月) 18:04:14.58Dim res As Variant ←これはいれてもいれなくてもエラーになります。
以前自分が作ったコードでは、同じような記述で動いていたのでこれでいいのかと。。。
省略せずに書くというのは、どこまで書けばいいのでしょうか?
p = Rows(1)
o = Year(DateAdd("m", mo, Cells(r, 2)))
Dim res As Variant
Set res = p.Find(What:="2013")
0561デフォルトの名無しさん
2013/11/25(月) 18:05:49.510562デフォルトの名無しさん
2013/11/25(月) 18:08:29.33解決しました・・・・ほんとバカで申し訳ない。
0563デフォルトの名無しさん
2013/11/25(月) 18:55:09.630564デフォルトの名無しさん
2013/11/26(火) 12:53:02.32operation1
operation2
operation3
とあって通常だったらoperation1からoperation2,opration3を
一連の流れで実行するのがあります。
operation3にはoperation1でGetOpenFilenameで得たフォルダ名を引数にして
call opration3(フォルダ名)
と書いてるんですが、このoperation3だけを単独で実行したい場合
どうします?勿論フォルダ名をどうにかして引数に与えるなりしないといけないん
ですが。
0565564
2013/11/26(火) 15:46:06.67operation3(フォルダ)
で、このope3_tandokuをボタンで起動することにしました
0566デフォルトの名無しさん
2013/11/26(火) 19:14:50.030567デフォルトの名無しさん
2013/11/27(水) 19:59:41.410568デフォルトの名無しさん
2013/12/10(火) 21:24:24.39ListBox以外で、64ビット版対応方法を知っている人はいませんか?
0569デフォルトの名無しさん
2013/12/29(日) 13:03:57.510570デフォルトの名無しさん
2013/12/29(日) 20:03:14.90しかし、リストで参照してしるところが相対参照したいのですが、Formula1:="=$A$25:$D$25をどう変更したらいいでしょうか?
ご教示ください。
Sub Macro1()
'
' Macro1 Macro
Range("E24").Select
ActiveCell.Offset(1, 0).Select
Do
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=$A$25:$D$25"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.IMEMode = xlIMEModeNoControl
.ShowInput = True
.ShowError = True
End With
ActiveCell.Offset(25, 0).Select
Loop Until ActiveCell.Row = 100
End Sub
0571デフォルトの名無しさん
2013/12/29(日) 20:07:55.37下げわすれてました。
0572デフォルトの名無しさん
2013/12/29(日) 23:10:51.30A25:D25でいいんじゃないかね
0573デフォルトの名無しさん
2013/12/30(月) 07:32:19.42そこは絶対参照のままでもいいんじゃないの?
やりたいことが、漏れなく書かれてるわけじゃないから違ってるかも知れないが
エスパーすると、たぶんこういうことがしたいのだと思われ
>>570
Sub Macro1()
Dim r As Long
For r = 25 To 75 Step 25
Cells(r, 5).Validation.Delete
Cells(r, 5).Validation.Add xlValidateList, xlValidAlertStop, xlBetween, _
"=" & Cells(r, 1).Resize(1, 4).Address
Next r
End Sub
因みに相対参照にするなら、.Address → .Address(0, 0)
しかし、自分の知ってる事というか自分が思い描いてることは
相手も把握している前提で話をするおバカさんって厄介だよね
ここはVBAの質問に答えるスレのはずなのに、VBAレベル的には初心者でも回答できるものばかりだが
正しい日本語で齟齬無く要望を伝える能力に欠けた奴の意図をエスパー的に酌み取る事の方ばかり
高レベルの能力が必要とされている気がする
まぁ俺もエスパーは本分じゃないんで、上記のコードも要望通りじゃないかもしれないけどw
0575デフォルトの名無しさん
2013/12/30(月) 09:44:24.16その質問内容についてはすべてエスパーしてくれ。
で回答は具体的で詳細に。
ではよろしく頼む。
0576デフォルトの名無しさん
2013/12/30(月) 10:24:26.23何勘違いしてるの?
0578デフォルトの名無しさん
2013/12/30(月) 12:38:38.33事の発端の>>570です。
自分のやりたいことを詳細に書き込まず、予想して補完してもらうような、質問をして申し訳ありませんでした。
>>572さん>>573さんありがとうございました。
0579デフォルトの名無しさん
2013/12/31(火) 10:44:06.16まぁ、、、がんばれw
0581デフォルトの名無しさん
2013/12/31(火) 13:03:01.75しかし、Addressの第一、第二引数は、規定値がTrueとはいえ、Boolean型ではなくVariant型で
それ故にインテリセンスも効かないし、そういうコードの明示性で言うなら、25や75を定数化しろって方が先な上に
こういう金を貰えるわけでもない場では明示性や読解性を犠牲にしてでも簡略化するのは常套手段なので
Addressの第一、第二引数には効かないインテリセンスがどうこう言ってることからしても、
0ではなく、Falseや相対参照を意味する定数を定義してそれを使えなんて単純な話じゃないよね?
いったい、どう書くのが正しいと言いたいのだろう?
0582デフォルトの名無しさん
2013/12/31(火) 20:31:10.760583デフォルトの名無しさん
2013/12/31(火) 20:45:45.07VBAをマスターしたく本屋へ行きましたがたくさんあり悩みました。
「10日間でマスター・・・」みたいなのがありましたが初心者でも大丈夫で
しょうか?そもそも10日間でマスターできるほど簡単?とは思えないのですが
初歩ですかね?
0585デフォルトの名無しさん
2013/12/31(火) 21:19:31.20初心者の入門用には、その程度から始めるのが良いかも。
ただ、同時に分厚いVBAの辞書みたいなのも買う事を勧める。
少しできるようになったら、疑問が出るだろうから本を買足すのも良いだろう。
また、「参照設定」での機能を説明している本は少ないので、
そこら辺はネット併用で情報収集して行けばよいと思う。
0586デフォルトの名無しさん
2013/12/31(火) 21:41:38.76そもそも何がしたいかなんて人によって違う
デカい本屋で一日潰して立ち読みでもしてみて、一番自分がやりたいことが
分かるように書かれてる本を買え
ただ関数・メソッドの癖なんかは一々細かく覚えてられんので、リファレンス本は持っておけ
0587583
2014/01/01(水) 10:02:50.800588デフォルトの名無しさん
2014/01/01(水) 10:42:09.00「参照設定」を話題にするということは、これはものすごく便利なものということですね?
IEを操作するという本で見たことだけはあるけど
これは何のために使い、何が便利なのですか?
0589デフォルトの名無しさん
2014/01/01(水) 16:04:34.73キーワードが分かってるなら少しはggks
便利かどうかは自分で判断しろ
0590588
2014/01/04(土) 10:07:28.34そりゃないよかあちゃん。
参照設定とはなにかどなたかおしえてくださいませんでしょうか?
0591デフォルトの名無しさん
2014/01/04(土) 10:44:10.13アプリケーションを「インストールする」みたいなそれ単体では無意味な言葉w
0592588
2014/01/04(土) 10:46:02.02レスありがとうございます。
ん、どういうことでしょう?
言葉の意味がよくわからないのですが・・・
0593デフォルトの名無しさん
2014/01/04(土) 12:43:00.21レジストリ登録は必須ではない
0594デフォルトの名無しさん
2014/01/04(土) 12:48:49.63それを入れたUSBメモリを接続すること自体がインストール
0595588
2014/01/04(土) 13:10:34.760596デフォルトの名無しさん
2014/01/04(土) 15:59:41.710597デフォルトの名無しさん
2014/01/07(火) 16:30:54.74別に詳しいこと知らなくても使い方だけ知ってればそれでいいじゃん
俺も知らないけど特に困ってないよ。
とりあえずエクセルの標準的な設定では使えない機能が
ライブラリっていう形で用意されてて、
それを参照するように設定することでライブラリの機能が利用できるようになるってことらしいよ。
参照設定の内容はブックごとに保存されるから別のPCにコピーしても同じように動く。
ただし、用意されてるライブラリはエクセルのバージョンごとに違ってるから
コピー先のマシンにインストールされてるエクセルのバージョンによっては
エラーが出て動かない場合もある(らしい)。
あと、参照設定しないでライブラリの機能を利用することも出来るけど、
その時はインテリセンスが働かないからコード書くときにちょっと面倒だったりする。
一例としてFileSystemObjectを使うときには
Microsoft Scripting Runtimeっていうライブラリを参照設定しておくと
Dim fso As New FileSystemObject
って宣言するだけでFileSystemObjectが使えるけど、
参照設定してないと
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
みたいに書かないといけない。
そして、参照設定していればコード中でインテリセンスが働くから
fso.とタイプしたらその後に続くメソッドとかが表示されるけど
参照設定してないとそれが出てこない。
大体こんな程度しか知らないけど、今のところ特に困ってない。
0598デフォルトの名無しさん
2014/01/07(火) 17:40:10.13プログラミングの学習は、いくら言葉を覚えて知識だけ詰め込んだって全然ダメだ。
最初はサンプルの丸写しでもいいから、とにかく手を動かせ。
0599デフォルトの名無しさん
2014/01/07(火) 19:49:40.93エクセルではなく大抵はOSやIEな
よく使用されるのは、Excelに付属するライブラリより、OSやIE付属のライブラリだから
例に挙げてるFSOも、Excel付属ではなく、OSに付属するIEに付属するWSHに付属するライブラリだから
0601デフォルトの名無しさん
2014/01/08(水) 04:38:24.94参照設定は、ある共通ルールに従って作られたプログラムを使用するために使うもの
別に何かの付属のライブラリじゃなくても良いんだぞ
0602デフォルトの名無しさん
2014/01/08(水) 05:17:40.58確かWin95やWin98だと、IEのバージョンアップするか、WSHの単体パッケージ入れる必要があったような
0603デフォルトの名無しさん
2014/02/07(金) 11:57:08.300604デフォルトの名無しさん
2014/02/07(金) 13:53:01.88暗黙の変換に頼る方が悪い
適切な関数なり数式なりで処理しろ
0605デフォルトの名無しさん
2014/02/07(金) 14:09:14.800606デフォルトの名無しさん
2014/02/07(金) 23:57:24.63四捨五入じゃないんだけどな
それ以前にintにキャストってそれホントにVBAの話か
0607デフォルトの名無しさん
2014/02/08(土) 00:51:47.100608デフォルトの名無しさん
2014/02/08(土) 01:19:57.82切り捨ては丸めの方法の一つだから、その日本語はおかしい
0609デフォルトの名無しさん
2014/02/13(木) 14:00:02.20通常はチェンジイベントで設定された文字を処理するように書いてますが
とあるタイミングではチェンジイベントを実行したくないのです
その、とあるタイミングの前に、テキストボックスのEnabledプロパティをFalseにすれば
チェンジイベントが発生しないのかと思ったら発生しますね
そうなると、とあるタイミングの前に、グローバル変数を設定して
イベントの中でその変数を見て抜けるようなベタな方法しかないですか?
0610デフォルトの名無しさん
2014/02/13(木) 14:12:23.89そこで一時的に全部のイベントを殺してもいいのならEnableEvents
止めたいのがテキストボックスのチェンジイベントだけなら自前でフラグ変数を用意しかない
0611デフォルトの名無しさん
2014/02/13(木) 14:24:24.41VBAにはそんなのがあるのですか、良いですね
VB6のスレが無かったので、同じだろうと思ってここでお聞きしましたがVB6にはないようでした
ありがとうございました
0612デフォルトの名無しさん
2014/02/13(木) 14:56:01.33イベントが発生してから無効にしてるんじゃないかと言う気がするが
0613デフォルトの名無しさん
2014/02/14(金) 12:48:25.84Enabled=Falseでユーザー操作はできなくなりますが
コードからは操作できて、その時にイベントが発生してしまいます
0614デフォルトの名無しさん
2014/02/14(金) 13:24:45.38それ以外なら知らん
0615デフォルトの名無しさん
2014/02/15(土) 20:19:21.38イベントハンドラでEnabledの値を確認すれば解決。
0616デフォルトの名無しさん
2014/02/16(日) 07:35:43.11対象のコントロールが少ないならグローバル変数を用意するよりスマートだし
0617デフォルトの名無しさん
2014/02/16(日) 21:56:15.350618デフォルトの名無しさん
2014/03/12(水) 02:35:55.66ID:oH1Ugruw0619デフォルトの名無しさん
2014/03/15(土) 07:03:26.55ID:FLjN0SBhExcel VBAでShell関数を使い、Powershellを呼び出し、その出力結果をtxtに出力して取り込んでいます。
Powershellを走らせて待っている間、Powershellの処理に時間がかかる場合に「(応答なし)」が表示されます。
待っていると動いてくれるので「(応答なし)」は表示させたくないのですが、DoEventsを使ってもだめでした。
「(応答なし)」を表示させない方法はあるのでしょうか。
0620デフォルトの名無しさん
2014/03/15(土) 07:37:44.08ID:kKPzvMNA0621デフォルトの名無しさん
2014/03/15(土) 07:47:18.40ID:IpiW3W820622デフォルトの名無しさん
2014/03/15(土) 10:15:49.53ID:FLjN0SBh>>621
powershellで「compare-object」という比較のコマンドを実行しています。
比較するデータと結果の差分が多いと出力に時間がかかり、作成したユーザフォームの左上にあるcaptionに「(応答なし)」と表示されてきます
(10秒位経っただけで表示されてしまう印象)。
その「(応答なし)」を表示させない方法があるのかどうか、知りたいと考えています。
0623622
2014/03/15(土) 10:19:01.52ID:FLjN0SBhユーザフォームでファイルを選択させて、
もろもろのオプションを指定した上で、
実行してpowershellを呼び出してcompare-objectで比較して出力、
という内容になります。
0624デフォルトの名無しさん
2014/03/15(土) 10:33:33.89ID:bmQ5jObQ単に条件分岐させて消すなりなんなりすればいいじゃん
0625622
2014/03/15(土) 11:08:40.69ID:FLjN0SBhすいません、正式名称が何というのか分かっていなかったのですが、「タイトルバー」ですかね、、、
Captionの右側に「(応答なし)」が表示されてきたので、622の箇所ではCaptionと書いてしまっています。
622の質問の段階で、Captionで意味が通じているようであれば、
条件分岐をさせて「(応答なし)」を出さない方法がよく分かっていないです。
0626デフォルトの名無しさん
2014/03/15(土) 11:52:35.81ID:kKPzvMNA0627622
2014/03/15(土) 14:12:17.82ID:FLjN0SBhコードの必要な箇所を抜き出すと以下になります。
======================
Public Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Public Const INFINITE As Long = &HFFFF
Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _
ByVal dwMilliseconds As Long) As Long
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
If 〜 Then
Dim TaskId As Long
Dim hProc As Long
DoEvents
TaskId = Shell("powershell " & Chr(34) & "& { " & 〜 & "}" & Chr(34), vbMinimizedNoFocus)
hProc = OpenProcess(PROCESS_ALL_ACCESS, 0, TaskId)
If hProc <> 0 Then
Call WaitForSingleObject(hProc, INFINITE)
CloseHandle hProc
End If
End If
======================
実のところ、shell関数の所で止まっていると思い込んでいたのですが、確認したところだと、powershellというよりは後続の同期処理、「Call WaitForSingleObject(hProc, INFINITE)」のところで起きているようでした。
おそらくこの部分を変えてやればうまくいくと思うのですが、しかしどうすればいいのか、分からない状況です。
0628デフォルトの名無しさん
2014/03/15(土) 16:15:36.48ID:3ah5yf0J同期処理用のAPIではどうしても応答なしになってしまう
Powershellのスクリプトの最後で、処理の完了を通知するぐらいしか思いつかない
たとえばテンポラリファイルを使うとか原始的な方法で
0629デフォルトの名無しさん
2014/03/15(土) 16:37:06.66ID:IpiW3W82> WaitForSingleObject
一番最後の引数に 1000 ぐらいを指摘して、1秒毎にポーリングすればいい。
タイムアウトかプロセスが終了したのかは戻り値を見ればわかる。
0630デフォルトの名無しさん
2014/03/15(土) 16:42:00.26ID:bmQ5jObQFunction findMyBook($bookname)
$books = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application")
foreach ($mybook in $books.WorkBooks){
if ($books.Name -eq $bookname){
return $mybook
}
}
実行するVBAのブック名が固定されるんなら、PS側の必要な処理が終わった後に
PS側でそのブック名見つけてやればいいんじゃないかね多分
0631622
2014/03/15(土) 22:02:16.82ID:FLjN0SBhVBAを以下のように修正し、応答なしが出なくなったことを確認しました。
======
(前)
If hProc <> 0 Then
Call WaitForSingleObject(hProc, INFINITE)
CloseHandle hProc
End If
======
(後)
Dim RC As Long
If hProc <> 0 Then
Do
RC = WaitForSingleObject(hProc, 1000)
DoEvents
Loop While (RC = &H102)
If RC <> 0 Then
Exit Sub
End If
CloseHandle hProc
End If
======
>>630
VBAの方でうまくいったのでpowershellの方は試していませんが、別の機会に試してみます。
皆様、ご協力ありがとうございました。
0632デフォルトの名無しさん
2014/03/15(土) 22:29:46.48ID:IpiW3W82> If RC <> 0 Then
> Exit Sub
> End If
> CloseHandle hProc
RC <> 0 の時もハンドルクローズしないとリークするよ。
0633デフォルトの名無しさん
2014/03/16(日) 09:30:39.93ID:cyT7e+/zご指摘助かります。
入れておきます。
0634デフォルトの名無しさん
2014/03/30(日) 01:09:57.92ID:HkRxLSsC配列(123,456,789)
これを下記のようにDebug.Printしたいのですが、コードをご教授ください。お願いします。
A123
B123
C456
D456
E789
F789
0635ピラフ
2014/03/30(日) 02:33:17.39ID:aRmbpBvoピラフが教えてあげちゃう。
Dim A
A = Array("A", "B", "C", "D", "E", "F")
Dim B
B = Array("123", "456", "789")
Dim I
I = 0
Dim E
For Each E In B
Debug.Print A(I) & E
Debug.Print A(I + 1) & E
I = I + 1
Next
0636デフォルトの名無しさん
2014/03/30(日) 03:21:41.62ID:HkRxLSsCピラフ様
あなたが私を救って下さいました。ありがとう。(心臓)
0637デフォルトの名無しさん
2014/03/30(日) 07:21:17.99ID:5cM6x3wcできてないじゃん
タオパイの自演か?
0638デフォルトの名無しさん
2014/03/31(月) 01:17:01.74ID:+/Q0rb5yDebug.Print A(I + I + 1) & E
0639デフォルトの名無しさん
2014/03/31(月) 13:20:56.18ID:dIVDD8y40640デフォルトの名無しさん
2014/03/31(月) 19:39:21.01ID:+xOJ5BKcなんじゃそりゃw
ふつーは
I = I + 2
だろ
0641桃白白 ◆9Jro6YFwm650
2014/03/31(月) 21:27:38.02ID:N162Y8AS桃白白のことは?好き?
0642デフォルトの名無しさん
2014/03/31(月) 21:47:20.15ID:DtbGifhU0643デフォルトの名無しさん
2014/04/01(火) 23:08:43.56ID:iMQ7tFIoそのファイルをまたファイルとして出力する方法がよくわかりません。
ご教示いただけないでしょうか。
一時的なバックアップとしてファイルをシート上に保管して、問題があったらそこからファイルを復元しようとしてます。
0644デフォルトの名無しさん
2014/04/17(木) 08:27:13.26ID:112XWAfL作ったものが全く思い通りに動かず悩んでます。
初心者なので別スレがあるのであれば教えていただけますと移動いたします。
0645デフォルトの名無しさん
2014/04/17(木) 09:14:36.93ID:jEbNeAxo長いのはコード貼るサイト使った方がいいと思
0646デフォルトの名無しさん
2014/04/17(木) 10:04:40.69ID:112XWAfL0647デフォルトの名無しさん
2014/04/17(木) 10:12:07.35ID:jEbNeAxohttps://friendpaste.com/
選択肢にVBAがないからVB.netでも選んどいて
0648デフォルトの名無しさん
2014/04/20(日) 23:00:50.17ID:s+35q5Omコードまだー?
俺も初心者だから他人の書いたコードを参考にしたいんだよー
0649デフォルトの名無しさん
2014/04/21(月) 07:31:38.50ID:4zlYEuTEどうも
0650デフォルトの名無しさん
2014/04/23(水) 20:07:42.26ID:xveRB+Blバブルソートさせるのはわかるが、表から数値を持ってくるにはどうしたらいいんですか?
0651デフォルトの名無しさん
2014/04/23(水) 20:44:27.34ID:ZM+hJQpra = Range("A1:F1")
0652デフォルトの名無しさん
2014/04/24(木) 00:53:35.48ID:m6J4LtNesub sort()
Dim a As Integer
Dim i As Integer
Dim j As Integer
Dim min As Integer
a = Range(A1:F1)
Do While j < a - 1
i = j + 1
Do While i < a
End Sub
よくわからん
0653デフォルトの名無しさん
2014/04/24(木) 01:40:46.12ID:nXU9pvpIaは配列
Rangeは初心者にはおすすめしない
Dim a() As Integer
Dim i As Integer
For i = 1 To 6
a(i) = Cells(1, i)
Next
宿題は自分でやれ
0654デフォルトの名無しさん
2014/04/24(木) 18:08:41.31ID:NeL4TUu80655デフォルトの名無しさん
2014/04/24(木) 18:30:46.52ID:ZALVHb/Cそれはなぜですか?
0656デフォルトの名無しさん
2014/04/24(木) 19:43:11.79ID:nXU9pvpI0657デフォルトの名無しさん
2014/04/24(木) 20:07:59.57ID:mnsZs1hI0658デフォルトの名無しさん
2014/04/29(火) 17:43:11.79ID:cd9z2Wukもし、可能ならばご教示ください。
1、PDF上の問題記号を選択すると解答選択肢が出てくる。(リストボックスのように)
2、その中から解答を選択できる。
3、最後に正答率、間違ったところの答え、間違ったところの根拠表示
0659sage
2014/04/29(火) 17:44:53.56ID:cd9z2Wuk0660デフォルトの名無しさん
2014/04/29(火) 17:55:04.83ID:KFswrGoL0661デフォルトの名無しさん
2014/04/29(火) 17:59:31.75ID:AVYTmVuiとりあえずPDFのサンプルをどっかにアップしてください
0662デフォルトの名無しさん
2014/04/29(火) 18:09:22.14ID:KFswrGoLよろしくお願いします。
0663デフォルトの名無しさん
2014/04/29(火) 18:21:18.11ID:/qylVqTcそのPDFの内容のうち、どこが問題記号でどこが解凍選択肢か、正解はどれか
そう言った情報が機械的に判断できる必要があるんだが、それは可能なのか?
0664デフォルトの名無しさん
2014/04/29(火) 18:25:24.29ID:8Pfgcz1/ttp://pdf-file.nnn2.com
ここでも嫁
0665デフォルトの名無しさん
2014/04/29(火) 18:35:52.24ID:hNJPTTozそうですね。確かに正解と回答を参照することが頭から抜けていました。正解は正解のPDFを元に手打ちで、Excelに打ち込もうかと思うのですが、良い方法はありますでしょうか?
0666デフォルトの名無しさん
2014/04/29(火) 18:37:58.44ID:hNJPTToz>>>658
>そのPDFの内容のうち、どこが問題記号でどこが解凍選択肢か、正解はどれか
>そう言った情報が機械的に判断できる必要があるんだが、それは可能なのか?
このすべてどうやればいいかわかりません。
0667デフォルトの名無しさん
2014/04/29(火) 20:11:16.39ID:7Qss/xhPこの分量だと全自動化は非効率すぎる
コード書く手間を考えると手動でリストボックスを並べてった方が早い
全文をコピペしたあと、カッコの中に丸付き数字が入った部分を文字列検索してリストボックスに置き換え
これぐらいはVBAでできるな
選択肢は丸数字、スペース、単語、スペースの繰り返しになってる行を検索、それ以外のパータンは手動で設定
0668デフォルトの名無しさん
2014/04/29(火) 20:13:02.51ID:7Qss/xhPまずはOCRからか
こんなもんVBAの質問の範疇じゃないわ
0669デフォルトの名無しさん
2014/05/03(土) 20:16:41.15ID:zpOcxqmEそもそもシートから参照したほうが早かったりしますかね。
0670デフォルトの名無しさん
2014/05/03(土) 20:20:45.14ID:6uPX0+EP0671デフォルトの名無しさん
2014/05/03(土) 20:53:57.75ID:Ucenml3Nすくなくともセル参照よりは配列を参照する方が早いというのが通説
頻繁に参照する場合は配列に入れてアクセスするのは常套手段
時間かかってるのが参照ではなく計算そのものなら、参照早くしてもあんまり効果ないだろ
0672デフォルトの名無しさん
2014/05/03(土) 21:13:46.07ID:pGt2sRew計算量が多くてスピードが重要ならVBAじゃなくてせめてVBを使え
0673デフォルトの名無しさん
2014/05/03(土) 21:20:32.55ID:BzVjbdP5> そもそもシートから参照したほうが早かったりしますかね。
1000単位のデータの内使うのがひとつだけとかの特殊な状況でない限り、ぜ〜〜〜っていあり得ない。
つーか、今配列使ってるならセル参照に変えてみなよ。
0674デフォルトの名無しさん
2014/05/03(土) 22:48:42.50ID:zpOcxqmE配列のほうが早いみたいですね。
シートでの計算も一切してませんし、会社のPCなのでVBを導入することも難しいので
計算式を見直して速度を上げたいと思います。
0675デフォルトの名無しさん
2014/05/03(土) 23:04:23.60ID:pGt2sRew0676デフォルトの名無しさん
2014/05/03(土) 23:53:50.92ID:8kppz192計算式を見直すんじゃなくて、処理を見直したほうがいいと思う
0677デフォルトの名無しさん
2014/05/04(日) 10:30:37.54ID:A7LETp9oこのスレでOKですか?
0678デフォルトの名無しさん
2014/05/04(日) 10:46:31.65ID:PkGldEjn1つを他のもののコピーとしたいんですが
単に代入すると同一のものの参照となります。
そうじゃなくて構造体の全メンバの変数の値をコピーするにはどうするのが一般的ですか?
0679デフォルトの名無しさん
2014/05/04(日) 10:47:16.38ID:PkGldEjnDim name as String
Dim age as integer
Dim sex as String
Dim first_time_sex_date as Date
End Structure
Dim student(2) as Student
student(1).name="Taro"
student(1).age=16
student(1).sex="Male"
student(1).first_time_sex_date="2012/7/7"
student(2)=student(1)
student(2).name="Jiro"
みたいにすると変になる。
0680デフォルトの名無しさん
2014/05/04(日) 10:48:20.51ID:PkGldEjnタブ(複数開いてる)でアクティブになっているページをgetするためには
どういうコードになりますか?
0681デフォルトの名無しさん
2014/05/04(日) 10:49:41.57ID:PkGldEjnそのシートをActivateせずに取り出す方法を以前発見したのですが
それはどういう方法だったのでしょうか?
0682デフォルトの名無しさん
2014/05/04(日) 14:59:19.38ID:ifQjgP9H構造体の全メンバをコピーする関数はないの?
クラスによくある、cloneとか
コピーには、Shallow Copy(浅いコピー)と、
Deep Copy(深いコピー)の2つがある
構造体の中に、構造体の参照があったらどうする?
クラスの中にクラスの参照とか、または相互に入っていたら?
さらに、2重、3重になっていたら?
深いコピーだと、参照なら本体を新しく作って、
本体もコピーするが、
浅いコピーだと、参照をコピーするだけなので、
本体は同じものを使ってしまう
0683デフォルトの名無しさん
2014/05/04(日) 15:10:16.41ID:PkGldEjnすんません、なにも知らんです。
ExcelのVBAには全メンバコピーの方法ってないのですか?
cloneってなにかのクラスのメンバメソッド?
あれ、VBAはクラスって使えるの?
ところで他言語でクラスの勉強はじめたけど、よく考えたら構造体とクラスって似てるよな。
0684682
2014/05/04(日) 17:21:28.68ID:ifQjgP9HVBAはV6仕様なので、無いかも?
クラスはある
クラスモジュールにクラスを定義して、new して使
なので、ここにCloneを自分で定義したら?
漏れもよく知らない
検索で調べただけだから、自分でも調べて
それと、複数のスレで同じことを聞く、
マルチポストは禁止なので、どちらかを取り消すこと
0685デフォルトの名無しさん
2014/05/04(日) 18:18:53.17ID:MnWuoZnQ>ところで他言語でクラスの勉強はじめたけど、よく考えたら構造体とクラスって似てるよな。
ちょっと待て。VBAは普通構造体というとユーザー定義型のことを指すけど、
VB.NetやC#の構造体とごっちゃに考えていないか?
VB.Netとかの構造体でクラスと似ていると言うなら、
そりゃそうだろとしか言いようがない。と言うか、
どういう時にクラスを使ってどういう時に構造体を使うのかを調べれば
すぐに分かると思う。
0686デフォルトの名無しさん
2014/05/06(火) 22:58:33.18ID:moIIdFlD日付をmm/dd/yy形式で出力してくるログをyyyy/mm/dd形式で取り込みたいのですが、
普通にformat(date,"yyyy/mm/dd")みたいにするとうまくできません。
(たとえば05/05/14は、2014/05/05とならず、2005/05/14となってしまいます)
とりあえず仕方なく前6桁と後ろ2桁で分離してくっつけなおすという格好悪い方法でやってますが、
もっとスマートなやり方があったら教えて欲しいです。
よろしくお願いします。
0687デフォルトの名無しさん
2014/05/06(火) 23:12:00.35ID:Avr/JzZk0100011011010101
みたいな話だ。
0688デフォルトの名無しさん
2014/05/07(水) 00:35:08.77ID:uh4oWvq+前5桁じゃなくて6桁?
ログってことはテキストファイルだろうから、テキストファイルウィザードで日付→MDYを選択すればいい
http://imo73.eek.jp/up/imo0105.png
0689デフォルトの名無しさん
2014/05/07(水) 07:35:46.76ID:SH7lri32即レスありがとうございます。
そうです5桁でした。
そして対象が行ごとに違う内容が入ってくるログなのと、
読み込んだ日付を基準に処理を分岐させたいのでその方法は使えないです。
0690デフォルトの名無しさん
2014/05/07(水) 08:31:27.71ID:FZZA6k3k> とりあえず仕方なく前6桁と後ろ2桁で分離してくっつけなおすという格好悪い方法
で、やれてるんじゃねーのかよ。
まあ、条件後だしする奴にはなに言っても無駄か...
0691デフォルトの名無しさん
2014/05/07(水) 12:49:17.67ID:oO9n6rpk0692デフォルトの名無しさん
2014/05/07(水) 13:43:37.48ID:rXgxEPuc0693デフォルトの名無しさん
2014/05/07(水) 14:17:10.39ID:uh4oWvq+VBA無関係
データ構造,アルゴリズム,デザインパターン総合スレ 2
http://toro.2ch.net/test/read.cgi/tech/1362301811/
0694デフォルトの名無しさん
2014/05/07(水) 14:52:43.45ID:eMxnpyoF方法はあまり変わらんけど、こんなのも有るよ
moto = "05/07/14"
Debug.Print "moto= " & moto
moto20 = Left(moto, 6) & "20" & Right(moto, 2)
Debug.Print Format(moto20, "yyyy/mm/dd")
2099年までこの方法は使える、2007では識別出来たけど、他Verは判らない。
0695デフォルトの名無しさん
2014/05/07(水) 18:18:55.57ID:MZ01fZnX0696デフォルトの名無しさん
2014/05/07(水) 22:57:09.28ID:VZywwylYSplitで"/"で分割して、年の部分だけ頭に"20"でもくっつけて、
順番かえて"/"で結合するようなんじゃダメ?
0697デフォルトの名無しさん
2014/05/08(木) 00:00:54.73ID:UhAEWxzwログで99年が2099年ってどこの未来から来た人ですか
0698デフォルトの名無しさん
2014/05/08(木) 00:46:43.35ID:E+ainyFVどのみち入力の年が2桁の時点で判断は必要になるわけで
0699デフォルトの名無しさん
2014/05/08(木) 01:06:45.17ID:8vH2dr8Eとか思ったけど、書式指定でDateに変換する方法が無い罠だった。
0700デフォルトの名無しさん
2014/05/08(木) 16:40:16.01ID:UhAEWxzwmoto = "05/07/14"
Debug.Print "moto= " & moto
saki = DateSerial(Mid(moto, 7, 2), Mid(moto, 1, 2), Mid(moto, 4, 2))
Debug.Print Format(saki, "yyyy/mm/dd")
まあこんな感じか
0701デフォルトの名無しさん
2014/05/08(木) 18:22:31.60ID:uOW3clqTmoto = "05/07/14"
saki = DateValue(Right(moto, 2) & "/" & Left(moto, 5))
Debug.Print Format(saki, "yyyy/mm/dd")
0702デフォルトの名無しさん
2014/05/09(金) 10:23:43.29ID:QVvO9eKkノートン 問題 裁判
ノートン 問題 裁判
ノートン 問題 裁判
0703デフォルトの名無しさん
2014/06/12(木) 22:38:54.01ID:JGtl8L6Jhttp://light.dotup.org/uploda/light.dotup.org28231.png
↑
データはこのような画像の通りにシート3つに分かれて存在しています。
どのようなマクロを組めばいいかお教え願いたいです。
ジャンルごとに変数というものを持たないといけないのでしょうか?
実際は母が使うので、ボタン一つで出来るのだとありがたいのですが・・・
大変面倒な質問ですが、お願いします
具体的なコードを教えてください
本当に困っていますお願いします
0704デフォルトの名無しさん
2014/06/12(木) 22:54:39.12ID:LMWZ0+/Qピボットテーブル使うってのは?
答えに全くなってないわけだが、、、、
0705デフォルトの名無しさん
2014/06/12(木) 22:55:17.66ID:JGtl8L6Jボタンひとつで計算してくれるようにしたいんですが
そのコードを教えてください
0706デフォルトの名無しさん
2014/06/13(金) 00:07:26.49ID:3uExzG0V0707デフォルトの名無しさん
2014/06/13(金) 10:30:47.32ID:jJMpWNsUコード作ってもいいが保守するのが大変。
まずは標準の機能でできないものかトライするよろし。
0708デフォルトの名無しさん
2014/06/14(土) 15:16:41.92ID:UnUM1hDE修正したデータを入力するというマクロを作成しているのですが、
同じ列で複数の間違いがあった場合、iを進めないように、コメントアウトしているif文を入れたのですが、
そうすると、2行目で 実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです
が表示されてしまいます。
列に間違いは2つ以上ないということで、コメントアウト部分を削除したままなら問題なく稼働するのですが、
この1文を入れるとどうしても進みません。
Arrayには、不一致部分のセルの座標が入っています。
全然ここから進まなくて困っていますので、どうかご教授お願い致します。
Do
ws.Cells(Array_l(j), Array_r(j)).Value = s1.Cells(i + 1, Array_r(j)).Value
'B1の数値を修正する
ws.Cells(Array_l(j), Array_r(j)).Interior.Color = xlNone
'B1のセル背景を元に戻す
ws2.Cells(Array_l(j), Array_r(j)).Interior.Color = xlNone
'B2のセル背景を元に戻す
'If Array_l(j) = Array_l(j + 1) Then
i = i - 1
'End If
j = j + 1
i = i + 1
If Array_l(i) = Empty Then Exit Do
Loop
0709デフォルトの名無しさん
2014/06/14(土) 15:23:57.74ID:UnUM1hDEi=i-1
の部分です 'つけ忘れです、すみません。
0710デフォルトの名無しさん
2014/06/14(土) 16:30:49.01ID:Je/qq0DA省略してる部分が多すぎて何がやりたいかわからん
ステップ実行するかなんかでロジック追ってみたら
昔ならこれフロー書いてみろとか言われるんだろうな
しかし、変数名って大事だなと思うわ
0711デフォルトの名無しさん
2014/06/14(土) 17:00:57.85ID:UnUM1hDE返信ありがとうございます
iを調節するIF文を入れるとなぜか
s1.Cells(i + 1, Array_r(j)).Value にエラーが出るんです。
s1.Cells( 2 , 4 ).Value
という風に変えてもエラーが出るんです。
IF文を消せば消えるんですが。
0712デフォルトの名無しさん
2014/06/14(土) 17:23:19.85ID:UnUM1hDE0713デフォルトの名無しさん
2014/06/14(土) 22:49:14.29ID:jhtRx4NU0714デフォルトの名無しさん
2014/06/15(日) 06:28:01.21ID:sZLgElUH何と?
0715デフォルトの名無しさん
2014/06/15(日) 15:24:53.85ID:+yTvRbGGこれでは完全互換とは言えない
0716デフォルトの名無しさん
2014/06/17(火) 03:20:53.05ID:HVt3rcccエクセルでブックを別PCにコピーして開き、
何もせずにそのまま保存してもファイルサイズが変わることがある
0717デフォルトの名無しさん
2014/07/08(火) 01:57:07.35ID:sRhcm5aMバージョンはOffice2010です。
【目的】
定型の文章の所定の部分のテキストを置き換える処理を考えています。
データそのものは、VBA内で計算で求めたりCSVなどのデータを読み込んだりします。
例えば、こんな感じです:
○○年には日曜日が○日あり、うち夏日以上の日が○日あった。
(年はInputboxからの入力、日曜日の日数はVBAで計算、夏日以上の日数はCSVのデータを取り込んで計数処理)
※文章などは適当に作成しています。
これをExcel VBAで作成しようとしたのは、関連するExcelのブックを別に作成する必要があるからです。
そのため、一括処理をしたいため、Wordの処理をExcel VBAで処理する計画を立てました。
【考えた処理】
文章は穴埋めですので、その部分を置換する処理を考えました。
ところが、この部分はテキストボックスに入っており、
レイアウトの関係でグループ化されています。
そのため、次のページのスクリプトを参考の上、
CreateObject("Word.Application")でWordオブジェクトを作り、
穴部分に識別記号を仮置きして置換処理をすることにしました。
参考スクリプト:http://www.ka-net.org/blog/?p=859
※別の人が別のPCで使う可能性があるため参照設定は使えません。
したがって、Shape型変数はObject型で定義しています。
(続く)
0718717
2014/07/08(火) 01:58:15.67ID:sRhcm5aM【事象と質問】
置換がうまくいかないため、ステップインで調べたところ、
> .Text = SrcText
> .Replacement.Text = DestText
の設定がされていないことがわかりました。
※参考としたスクリプトをそのままWord VBAで実行するとうまく行くことは確認済みです。
質問は、設定ができない理由と解決策です。
(置換以外の方法でも可ですが、文章はWordで今の構造のままでExcel VBAを使うことは必須です。)
よろしくお願いします。
0719デフォルトの名無しさん
2014/07/08(火) 02:12:48.51ID:IVVVLtjN0720717
2014/07/08(火) 03:31:21.49ID:sRhcm5aM717に書いたような穴埋め文章です。
> 例えば、こんな感じです:
> ○○年には日曜日が○日あり、うち夏日以上の日が○日あった。
> (年はInputboxからの入力、日曜日の日数はVBAで計算、夏日以上の日数はCSVのデータを取り込んで計数処理)
> ※文章などは適当に作成しています。
具体的には、次の文章が完成形になります。(例では、毎年3月に作成する設定。)
「2012年には日曜日が53日あり、うち夏日以上の日が120日あった。」(2013年3月8日作成)
「2013年には日曜日が52日あり、うち夏日以上の日が147日あった。」(2014年3月12日作成)
※数字は適当です。
※数字以外の文言は全く同じですが、
もとの文章には書式の設定が一部テキストに設定してあるため
.TextFrame.TextRange.Text = yyyy & "年には日曜日が" & dd & "日……
のようにTextプロパティで直接設定するのは難しいと思われます。
このような文章が、テキストボックスに入り、
ラインなどの図形との相対位置を固定する目的でグループ化されています。
なので、雛形とする文章としては、
「@@@年には日曜日が##日あり、うち夏日以上の日が**日あった」
として、@@@を2013に、…と置換するマクロを企画しています。
0721デフォルトの名無しさん
2014/07/08(火) 09:12:52.62ID:2n5wMRlnそういう言葉での説明じゃなくて
実際のコードを晒せってことだと思うよ
0722デフォルトの名無しさん
2014/07/08(火) 09:35:08.31ID:IVVVLtjN0723717
2014/07/08(火) 19:33:18.41ID:JOUr1Q8PWordにあるオブジェクトの情報は717に記載した通りですが、
構造を理解していただくためにサンプルを用意しました。
ですが、アップローダにファイルを置いたことがないため、
オススメのアップローダを教えていただけると幸いです
>>721
コードは、717のコードのキャンバス部分の処理を若干手直しした、次のものを使っています。
動くかどうかの実験ですので、手入力などの処理ではなく、全てコード内に記述してあります。
※実際の作業では特定のテキストボックスのテキストの置換で足りるのですが、
その特定のテキストボックスを指定する知識がないため、オブジェクトを総ざらいしています。
(コードは次のレスで)
0724717
2014/07/08(火) 19:37:06.95ID:JOUr1Q8PSub ReplaceString()
Dim appWD As Object, WDfile As Object
Dim ShapeObj As Object, GrpObj As Object, CvsObj As Object
Const SearchStr As String = "@@@"
Const ReplaceStr As String = "2013"
Set appWD = CreateObject("Word.Application")
Set WDfile = appWD.Documents.Open("C:\hoge\fuga\717document.doc")
appWD.Visible = True
For Each ShapeObj In WDfile.Shapes
If ShapeObj.Type = msoTextBox Then
ReplaceShapeText ShapeObj, SearchStr, ReplaceStr
ElseIf ShapeObj.Type = msoGroup Then
For Each GrpObj In ShapeObj.GroupItems
If GrpObj.Type = msoTextBox Then
ReplaceShapeText GrpObj, SearchStr, ReplaceStr
End If
Next GrpObj
(if文の途中ですが、改行が多いと怒られるので続く)
0725717
2014/07/08(火) 19:37:46.21ID:JOUr1Q8PElseIf ShapeObj.Type = msoCanvas Then
For Each CvsObj In ShapeObj.CanvasItems
If CvsObj.Type = msoTextBox Then
ReplaceShapeText CvsObj, SearchStr, ReplaceStr
ElseIf CvsObj.Type = msoGroup Then
For Each GrpObj In ShapeObj.GroupItems
If GrpObj.Type = msoTextBox Then
ReplaceShapeText GrpObj, SearchStr, ReplaceStr
End If
Next GrpObj
End If
Next CvsObj
End If
Next ShapeObj
appWD.Quit
Set appWD = Nothing
End Sub
Private Sub ReplaceShapeText(Shp As Object, SrcText As String, DestText As String)
If Shp.TextFrame.HasText Then
With Shp.TextFrame.TextRange.Find
.ClearFormatting
.Forward = True
.Text = SrcText
.Replacement.Text = DestText
.Execute Replace:=wdReplaceAll
End With
End If
End Sub
0726721
2014/07/09(水) 00:07:05.52ID:1lOVE9DK>>724-725のコードをそのままExcelのブックにコピペして
Sub ReplaceString()
に
Const msoTextBox As Long = 17
Const msoCanvas As Long = 20
Private Sub ReplaceShapeText(Shp As Object, SrcText As String, DestText As String)
には
Const wdReplaceAll As Long = 2
を追加したら動きました。
Const msoTextBox As Long = 17
と
Const wdReplaceAll As Long = 2
は、参照設定すれば不要になったのですが、
Const msoCanvas As Long = 20
は、参照設定しても省略できませんでした。
うちの環境がOffice2000だからかもしれません。
とにかく、この状態でマクロを実行すると、
指定したドキュメントを自動で開いて
その中に複数あるテキストボックス内の
複数ある"@@@"をすべて"2013"に置換することまでは確認できました。
うちの環境では要求どおりの動作を出来ているので
717さんの環境でなぜ正常に動かなかったのかは分からないです。
0727717
2014/07/09(水) 20:31:38.14ID:Og8DhtMc確認、ありがとうございます。
Office2000で、定数宣言を加えたら動作したとのことで
組込み定数まわりを確認しました。
> Const msoTextBox As Long = 17
についてはif文でTrue判定されるオブジェクトがあり、
それが該当のテキストボックスであることが確認できましたので
組込み定数として存在するようです。
おそらく
> Const msoCanvas As Long = 20
についても問題はないと思われます。
※調べてみると、描画キャンバス自体は2002から導入のようですので、これが原因かもしれません
> Const wdReplaceAll As Long = 2
こちらの中身をイミディエイトウィンドウで確認すると、値がない(未定義)ようでした。
この定数を宣言して実行したところ正常の動作が確認できました。
考えてみれば、この定数はプリフィクスがwd、つまりWordの定数ですので、
デフォルトのままではExcel VBAのVBEでは使用できないということのようです。
解決への糸口となったご報告をいただきありがとうございました。
(追伸)
テキストボックスでないことからググった時には除外していたのですが、
どうやら似たような質問がQ&Aサイトにあり、
この時は解決できなかったようです。
0728726
2014/07/09(水) 21:11:44.18ID:1lOVE9DK動いたようで何よりでした。おめでとうございます。
ただ、一点気になったのですが、
もしかしてOption Explicitをお使いになってなかったのでしょうか?
私は必ず使用しています。
今回も最初にコピペしたままのコードを実行したら
定数の部分で宣言がされていないというエラーが出たので、
そこを定数で宣言すると言う段取りでコードを動かすことが出来ました。
(定数の値はプリフィクス名でググって見つけました)
つまり、あえてエラーを出すことでデバッグが容易になったのです。
717さんの場合も宣言を強制しておけばすぐに解決できたと思われます。
0729デフォルトの名無しさん
2014/07/12(土) 12:24:11.38ID:O1Z1M9lk0730デフォルトの名無しさん
2014/07/12(土) 22:58:06.77ID:+s4rNRpY頼むから必要な読点を打ってくれ
0731デフォルトの名無しさん
2014/07/13(日) 07:21:36.78ID:Om7JuGMW日本人でない>>729にそれを期待するのは、ちょっと酷というもの
0732デフォルトの名無しさん
2014/07/13(日) 16:51:10.58ID:+Dp2MdIIとても日本人レベルとは思えない
0733デフォルトの名無しさん
2014/07/13(日) 16:56:01.83ID:7UphRhX90734デフォルトの名無しさん
2014/07/13(日) 17:10:07.28ID:0MWyRvVmOption Explicit を使わずに開発なんてしなくてもイイ。
余計な苦労をしたがるんだね w
つまりプログラミングやめろって事だなw
0735デフォルトの名無しさん
2014/07/13(日) 17:20:06.57ID:+Dp2MdIIオイw
Option Explicit を使わずに開発なんて、
しなくてもイイ余計な苦労をしたがるんだね w
こうだろうが。
0736デフォルトの名無しさん
2014/07/13(日) 19:10:11.11ID:rVpga5pw気楽なもんだな。
0737デフォルトの名無しさん
2014/07/13(日) 19:10:16.48ID:0MWyRvVmその解釈が正しいかどうかは本人にしかわからない
だからちゃんと必要な読点を打てという指摘は正しい
0738デフォルトの名無しさん
2014/07/13(日) 19:23:41.31ID:+Dp2MdIIそれこそ日本語読解力の問題であって
前後の文脈から考えて>>735以外の「正解」はありえない。
0739デフォルトの名無しさん
2014/07/13(日) 19:29:46.86ID:QheVEL1d0740733
2014/07/13(日) 19:42:04.37ID:CV5kHNB8一応>>735さんの書かれたつもりだったんですが w
0741733
2014/07/13(日) 20:20:09.61ID:7UphRhX90742デフォルトの名無しさん
2014/07/13(日) 23:23:16.74ID:sXH0x9J70743デフォルトの名無しさん
2014/07/14(月) 01:06:02.87ID:FQHz3O6K0744デフォルトの名無しさん
2014/07/14(月) 01:11:44.55ID:so/VE0oV0745デフォルトの名無しさん
2014/07/14(月) 02:55:55.32ID:FQHz3O6K0746デフォルトの名無しさん
2014/07/17(木) 21:28:52.14ID:FEF7k1Mw0747デフォルトの名無しさん
2014/07/17(木) 22:40:35.14ID:TJxMLENNつまり始まりすらないってことだ
0748デフォルトの名無しさん
2014/07/18(金) 13:16:13.65ID:BjaOTzuOOption Private Module されてんぞ...
0749デフォルトの名無しさん
2014/07/18(金) 13:42:30.60ID:CjYs434Gもう不要だとわかってても削除できない"高校の時の彼女"クラス
いつまでもインスタンス化されない"結婚"オブジェクト
0750デフォルトの名無しさん
2014/07/18(金) 17:44:56.79ID:IUczFYV9多分、彼女クラスにそういうメソッドが実装されてないんだよ
0751デフォルトの名無しさん
2014/07/18(金) 20:45:50.05ID:Mqs0/spS0752デフォルトの名無しさん
2014/07/18(金) 22:54:25.11ID:CjYs434Gパラメーターを色々変えてみたけどエラーになる
0753デフォルトの名無しさん
2014/07/18(金) 23:07:46.24ID:VtppY2NX彼女オブジェクトが実体化してないんだよ。
エアだから。
あと、結婚イベントの発生トリガーは資産パラメータの値が一定の閾値を超えたかどうかだったりする。
割り込みかけてムリヤリイベント発生も出来るっちゃ出来るんだが、その場合はできちゃった婚イベントが発生する。
0754デフォルトの名無しさん
2014/07/19(土) 15:05:21.41ID:YdLkWna+ダックタイピングしてるから自分の子供だと思ってるだけで
嫁オブジェクトを使った他人の子供を継承してるだけ
DNA鑑定というインタフェースで発覚するようになった
0755デフォルトの名無しさん
2014/07/19(土) 15:35:07.34ID:wF73piGx0756デフォルトの名無しさん
2014/08/28(木) 21:07:31.12ID:dhL2lVzmアクセスしているwebページのjavascriptの変数に設定されている値を取得できますか?
DOMアクセスみたいな感じで。
0757デフォルトの名無しさん
2014/08/28(木) 23:24:06.15ID:wvPo7Nhd0758デフォルトの名無しさん
2014/08/29(金) 00:50:38.48ID:1e01sq6UFunctionローカル変数は 取得できないけど
それでもよければ 一応やり方(当方 IE6 です)
�@表示するHTMLの中に
<SPAN ID=EXCEL style="visibility:hidden"></SPAN>
を作っておく ( < > は半角に変換してね)
�AExce VBAで
ObjIE.document.Script.execScript "document.all.EXCEL.innerText=変数名"
Debug.Print ObjIE.document.all.Excel.innerText
を実行
注-1) execScriptに指定するコードは javascript構文上 正しい必要があります(大文字・小文字に注意します)
注-2) 存在しない変数名を指定した場合 実行時エラーになります。
補足
�@を用意しなくてもいい方法はあるけど
裏技的(?)な 手法な気がするから 書き込んでいいものか・・・・
0759デフォルトの名無しさん
2014/08/29(金) 02:00:42.15ID:SwR0/7emDBはsqlserverです。Management studioでは問題無く結果が出ます。
クエリは一時テーブルを作成して、データを入れる形式のものです。
ググったら、SET NOCOUNT ONを加えると解決するとありましたが、全く解決しません。
0760デフォルトの名無しさん
2014/08/29(金) 06:55:00.53ID:ldH6xU4Ssql文発行する前に接続状態確認して接続が切れていたら接続し直すようにしたら
直った(?)みたいなんだけどなんで接続が切れたのかは? w
0761デフォルトの名無しさん
2014/08/30(土) 09:04:31.13ID:cvlIMipgどう見たって接続がブチ切れてるときに接続しようとしてるな。
接続すればいいだけじゃん。
0762デフォルトの名無しさん
2014/08/30(土) 09:14:58.47ID:cvlIMipg引数はデリゲートで出来ていて、設定するメソッドによって幸せな人生が送れるか離婚するか一家心中かが決まる。
0763デフォルトの名無しさん
2014/08/30(土) 12:08:04.90ID:mBHEjlfpRecordCountを使ってみたものの、重複を避ける術が分からなかったため、取り敢えず行数を取得しようとしたところ、結果が-1続きです。
CursorTypeをadOpenStaticにすると解決すると知りましたが、結果は変わりませんでした。
0764桃白白 ◆9Jro6YFwm650
2014/08/30(土) 12:13:28.21ID:CGzN53tJsqlでgroup by使っちゃったら?
0765デフォルトの名無しさん
2014/08/30(土) 12:15:01.66ID:6mdTxY1W詳細は
SQL質疑応答スレ 15問目
http://peace.2ch.net/test/read.cgi/db/1402919549/l50
ででも聞いて
0766デフォルトの名無しさん
2014/08/30(土) 13:00:57.43ID:mBHEjlfp>>765
すいません、group byは使用していますが、氏名ごとに項目がまた分かれていて、氏名でカウントしたくても重複してしまうんです。
distinctで重複行を削除してしまうと、取得したい部分もが取得出来ないんです。
0767デフォルトの名無しさん
2014/08/30(土) 13:19:50.63ID:6mdTxY1W最初に明らかにしといてよ
これ以上は765で書いたSQLのスレでやって
0768桃白白 ◆9Jro6YFwm650
2014/08/30(土) 18:01:36.60ID:CGzN53tJなるほどお。Scripting.Dictionaryに値を取り込んでCountプロパティを参照しちゃうのはどう?
0769デフォルトの名無しさん
2014/08/30(土) 18:33:16.82ID:BrsM5WtF>>763
"何の"レコードセットなのか書け
adOpenStaticとか書いてるからADOだとは思うが
あとわかってると思うけど、下の方でSQLでとかいろいろ言われてるのは
レコードセットの行数数えるんじゃなくて、レコードセット作るときに考えて
それに応じたレコードセット作れって話だぞ
状況によっては素直にループまわして数えたりするのもありかもしれん
0770デフォルトの名無しさん
2014/08/30(土) 18:50:55.63ID:zHnP+BOD0771デフォルトの名無しさん
2014/08/31(日) 11:39:18.28ID:Uv1n/GEh便利な道具をあえて使わないマゾが多い
0772デフォルトの名無しさん
2014/08/31(日) 18:25:24.43ID:rhIgfBaF便利機能なら.Netフレームワークとかで外からやった方がよっぽど使えるものがあるし、
有る程度以上出来る人は余程の事情や拘りがない限りそうしてる。
0773デフォルトの名無しさん
2014/08/31(日) 18:50:49.65ID:7NqoYP/00774デフォルトの名無しさん
2014/09/01(月) 05:31:21.29ID:vMu9ecQ1会社だと、使うのは自分じゃないことも多いから
ブック渡せばいいだけと言うアドバンテージがあるから
0775デフォルトの名無しさん
2014/09/01(月) 11:15:51.46ID:+3zv7IaL0776デフォルトの名無しさん
2014/09/01(月) 20:27:19.03ID:ttcK5TiRある程度大きなシステムなら改修案件としてEXCELファイルを出力する機能を盛り込むことを考えるもんだけど。
確かにEXCEL単体で済むようなツールとかであればVBAも有効。
ただ、だったらソートのやり方ぐらいでガタガタ言わない。元々規模としては小さなものなんだから。
0777デフォルトの名無しさん
2014/09/01(月) 20:49:55.88ID:muw4rMlT0778デフォルトの名無しさん
2014/09/01(月) 20:55:17.96ID:y5S85mVsもともと Office は エンドユーザが主に 使うからね
>だったらソートのやり方ぐらいでガタガタ言わない。元々規模としては小さなものなんだから。
これいわゆる 情シス部門の言い分だよね
エンドユーザから見ると むかつくよ
自分は情シス部門・エンドユーザ部門の両方在籍した事あるから
よくそんな事いってたし 言われた
0779デフォルトの名無しさん
2014/09/02(火) 05:28:28.75ID:fQS2Uf1m>もともと Office は エンドユーザが主に 使うからね
いやそれは偏見だろ。
エンドユーザーであればなおのこと、コーディングルールなどに縛られることもなく勝手気ままに作れるんだから
それこそソートの方法なんてとやかく言われる筋合いもないだろうな。
ネットでVBAのソートのコード拾ってきて貼り付けて自分のとこ用にちょっと直しておしまいだよ。
0780デフォルトの名無しさん
2014/09/07(日) 17:32:00.80ID:tzy47GW2それに何かしらの処理をプログラムがあるとします。
そのプログラムは以下のように列がベタ打ちになっています。
range("A" & i).value
列を以下のように挿入したとき
id 苗字 名前 年齢
プログラムのベタ打ち部分を変更しなくてはなりませんが、
これを自動で認識してくれるようなベストプラクティスはありませんでしょうか?
0781デフォルトの名無しさん
2014/09/07(日) 17:41:36.24ID:8bYOV7ymCellsで指定する
0782デフォルトの名無しさん
2014/09/07(日) 18:38:31.89ID:3xCPEmkyexcelVBAで。
もちろん、ファイルフォーマットを理解して処理するとかなしで。
0783デフォルトの名無しさん
2014/09/07(日) 19:19:51.44ID:nasEMBRkたぶんこれ
http://www.bird-soft.net/mt/2008/07/getpixelexcel_vba.html
ちがってたらゴメン
0784デフォルトの名無しさん
2014/09/07(日) 20:12:39.88ID:tzy47GW2いやいや、range("B" & i) を
cells(i, 2)にしたところで何も変っておらんでしょw
0785デフォルトの名無しさん
2014/09/07(日) 20:17:45.97ID:3xCPEmkyありがとう!これでいけます。
会社の制限だらけのPCで、画像をppmフォーマットにしたかったんです。
画像処理プログラム作るのにppmはシンプルだから楽なので。
0786デフォルトの名無しさん
2014/09/07(日) 20:21:57.61ID:nasEMBRkこんなんどう?
予めEXCELで(VBAでもいいけど)セル範囲に名前をつけておく
B:B に "名前"とかね
んで
Range("名前").cells(1,1) ・・・・・・ B1
Range("名前").cells(2,1) ・・・・・・ B2
A列とB列の間に列が挿入されたら
その名前の定義範囲も自動的に移動する
0787デフォルトの名無しさん
2014/09/07(日) 20:34:52.76ID:3xCPEmky>>786が一般向け。
ただし、後から管理するようになった人には非常にわかりづらいものになる。
プログラマとしてなら"A"をベタ打ちしない。(ベタ打ちを埋め込みまくるのを、ハードコーディングと呼ばれる)
Const 名前 = "A"のように宣言して、
プログラム中で、const名を使う
range(名前 & i).value
これで、Const 名前=を変更するだけで
にするだけでプログラム中の列は全部漏れなく切り替わる。
0788デフォルトの名無しさん
2014/09/07(日) 23:17:03.39ID:tzy47GW2回答ありがとうございます。
constはそれなりに有用だと思いますけど、
ベタ打ちの1元管理に過ぎず、あまり好きな手法じゃありません。
列を削除した時など、A列とかで指定でされているため
そのまま動作し、バグの温床ともなりそうです。
個人的には、786の手法がベストだと思いました。
しかし、ここで問題点がもう1つ。
range("名前")ですが、例えば、他のexcelファイルから
本体のexcelファイルを操作している時など、
activeworkbookが自身であるか不確実な状況だと誤動作する可能性がありますよね。
thisworkbook.range("名前")とできればいいんですが、
シートオブジェクトじゃないと駄目だし、
worksheet(1).range("名前")とかだとせっかく名前定義してんのになんでシートの指定が必要なの?
って感じだし、なんでrangeを自分自身じゃなくてactiveworkbookに実行するんだマイクロソフトォォォって感じなんですが、
こんなときスマートな方法があれば教えてもらいたいです。
あらかじめ、activateしておくぐらいですかね?
0789デフォルトの名無しさん
2014/09/07(日) 23:38:09.22ID:u52+473R0790デフォルトの名無しさん
2014/09/08(月) 04:08:01.82ID:zauy8Y5oこれ以外の方法見つからないんです。。。
0791デフォルトの名無しさん
2014/09/08(月) 07:18:49.16ID:mvF3bbYPApplication.Range(範囲名)で開いてるブックの範囲は全部とれるはず
名前が競合するときは、範囲名はブック名で修飾できる
Rangeのヘルプには
>オブジェクト修飾子を指定せずにこのプロパティを使用すると、ActiveSheet.Range のショートカットとなります
って書いてあるんだが、実際はApplication.Rangeだと思うんだが
範囲名使うとこの二つで動作違う
オブジェクト省略したときの動作はApplication.Rangeと同じっぽい
0792デフォルトの名無しさん
2014/09/08(月) 07:26:39.29ID:mvF3bbYP>なんでrangeを自分自身じゃなくてactiveworkbookに実行
自分自身とは何を指してるのかわからんが
(ActiveWorkbookが返す)WorkbookにRangeは無いぞ
0793デフォルトの名無しさん
2014/09/08(月) 13:24:33.72ID:B4kL45G3省略した時の仕様が気に入らず確実さを取るなら、すべてのRangeに対してブック名を省略しなきゃいいだけ
0794デフォルトの名無しさん
2014/09/08(月) 23:33:56.11ID:zauy8Y5oありがとうございます。
applicationなんてものがあったのですね!
これでいきたいと思います!
0795デフォルトの名無しさん
2014/09/09(火) 01:09:57.15ID:EBo5pa930796デフォルトの名無しさん
2014/09/09(火) 02:38:21.63ID:dbNyx8YK曜日 開始 終了
月 10 120
火 80 350
水 90 250
…
日 180 620
上のような7行3列のデータベースがあったとして、
「曜日」という変数が「月」だったなら
開始=10、終了=120
のように予め関連づけたいのですが
最もスマートで簡単な方法はどのようにしたらいいのでしょうか?
if文でひたすら場合分けする方法しかわかりません。
上のデータベースはVBA上で記載しても、
エクセルのシート上でも構いません。
ただし、当方あまり複雑なのは分かりませんので(データベースを呼び出すなど)
できるだけ単純なものを希望します。
0797デフォルトの名無しさん
2014/09/09(火) 03:45:59.03ID:5K5CkDtqいつも思うけど "スマートな方法" って その人それぞれの主観が入るから他人には分からんよ
その人とっては良いと思っても 他の人には "スマートじゃない!"てのは多々ある
で自分ならこうする
※シート上にそのテーブル作成して
Dim Ws As Worksheet
Set Ws = Worksheets("Sheet1") 'テーブルのあるシート
開始 = Application.WorksheetFunction.VLookup(曜日, Ws.Range("A2:C8"), 2, False)
終了 = Application.WorksheetFunction.VLookup(曜日, Ws.Range("A2:C8"), 3, False)
※VBA内で Select Case で処理する手もあるけど
メンテ考えたら お勧めしない。
0798デフォルトの名無しさん
2014/09/09(火) 03:54:36.64ID:dbNyx8YKありがとうございます。
勉強になりました。
0799デフォルトの名無しさん
2014/09/09(火) 09:58:22.91ID:iON1NCNG0800デフォルトの名無しさん
2014/09/09(火) 10:29:01.15ID:5K5CkDtqじゃぁ 君なら
>>796への ベストと思う回答は?
0801デフォルトの名無しさん
2014/09/09(火) 11:50:31.70ID:WRZDH2Bt799じゃないけど、
dim r as range
set r = range("A1").currentregion.columns(1).find("火")
if not r is nothing then
debug.print r.value
debug.print r.offset(0, 1).value
debug.print r.offset(0, 2).value
end if
とかやったりするなぁ。
0802デフォルトの名無しさん
2014/09/09(火) 12:00:47.78ID:WRZDH2Btその関連を頻繁に使うのなら、Dictionaryを使う手もある。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_dictionary.html
↑の内容が理解できるかどうかわからんが・・・。
0803デフォルトの名無しさん
2014/09/09(火) 12:53:48.30ID:puhlfYKM0804800
2014/09/09(火) 13:12:07.91ID:5K5CkDtqまとめレスします
>>802
なるほど Dictionaryってあるんですね 知らんかった
ただ
Dictionary使った事ないんであれですけど
1つのKEYに対して二つの値を格納する事が "単純に" 出来るんでしょうか
自分も一瞬 コレクション使うってのも考えたんだけど
ちょっと工夫しないといけないんで そこで引っかかったんですよね
>できるだけ単純なものを希望します。
ってのもあったし
>>803
たしかに曜日は増えないけど
開始・終了値は 変わる可能性があるわけで
その可能性が ほぼないとするなら
select Case でもいいとは思うな
>>799さんへ
VLookup使わない 回答をお待ちしてます。
自分も勉強になりますんで
0805デフォルトの名無しさん
2014/09/09(火) 13:24:26.21ID:WRZDH2Bt> 1つのKEYに対して二つの値を格納する事が "単純に" 出来るんでしょうか
え?二個のDictionary作ればいいだけじゃん。
0806800
2014/09/09(火) 13:27:14.63ID:5K5CkDtq取り急ぎレスします。
0807デフォルトの名無しさん
2014/09/09(火) 14:14:22.21ID:iON1NCNG元データをどっから持ってくる(どこで定義する)かによるが
VBAを使う特別な理由が無ければ、VBA使わないってのがスマートだと思うんだが
あらかじめエクセルシートで用意できるなら、俺ならこのぐらいならVBA使わん
どうしてもVBA使う理由があるなら、その理由とVBAの規模次第でどうやるか変わるだろ
ちょっとした使い捨てぐらいのコードなら、Select Caseでべた書きも良いし
大規模なシステムの一部なら、配列やディクショナリにでも入れて処理するか
それ用のユーザ定義型やクラス作る手もある
0808デフォルトの名無しさん
2014/09/09(火) 14:51:37.26ID:puhlfYKMセルに値を予め埋めておいて(constの代わり)、下のようにして拾ってくるだけで済ませるけどね。
Select Case 曜日
Case "月"
開始 = ThisWorkbook.Worksheets(1).Cells(1, 2).Value
終了 = ThisWorkbook.Worksheets(1).Cells(1, 3).Value
Case "火"
開始 = ThisWorkbook.Worksheets(1).Cells(2, 2).Value
終了 = ThisWorkbook.Worksheets(1).Cells(3, 3).Value
...
800のひとまで799のvlookupに噛み付いているけど、あれは検索項目がソートされているのが前提だから、
今回のように月、火、水、と曜日で並んでいるデータには向いてないんじゃないのかい?
曜日の並びが変わるのは見た目もメンテナンスもわるい。
そもそも799はVLOOKUPで済むような話だとVBAに起こさなくてもExcelシート内でやりたいこと解決してしまうってことでしょ。
0809デフォルトの名無しさん
2014/09/09(火) 15:41:44.44ID:7s/ClwS2> あれは検索項目がソートされているのが前提だから、
一致検索ならソート要らんでしょ
0810800
2014/09/09(火) 16:15:22.73ID:5K5CkDtq>>807 さんへ
まず後半部分は その通りだけど
>Select Caseでべた書きも良いし
>配列やディクショナリにでも入れて処理するか
>それ用のユーザ定義型やクラス作る手もある
が良くてVlookupがだめな理由は?
>>799 >VLookup使うならVBAとかいらんけどな
否定されるなら その理由がほしい
でそれが
前半部分であるなら
>>796 >エクセル2007でのVBAについてです。
である事 そして
>>796 >「曜日」という変数が「月」だったなら 開始=10、終了=120
>>796 >のように予め関連づけたいのですが
と書いては あるけど それが最終結果だとは読みとれんかったし
これを元になんらかの処理をしたいんだろうなと自分は受けとって回答した
だから >>799さんが
>「曜日」という変数が「月」だったなら 開始=10、終了=120のように予め関連づけたいのですが
を最終結果と判断してあのレスなら それはそれで納得できる。
(自分には単純に否定されただけに見えたし >>796さんにそれなりの説明つけてレスして欲しかった)
>>808 さんへ
ごめん勉強不足かもだけど
>>809さんと同じ認識だったんだけど
詳しく解説を頼みます。
0811デフォルトの名無しさん
2014/09/09(火) 16:42:53.83ID:iON1NCNGなにか気に障ったのなら謝っておくわ
俺はVLookupがダメだとは言ってないぞ
もちろんVBAでVLookupでやっても良いよ
ただ、出来るだけ単純にって言う元質問者に対して
それならVBAすら使う必要ないんじゃないかって投げかけてるだけ
Select Caseでべた書きのくだりでVLookupに触れてないのは、その前に
>元データをどっから持ってくる(どこで定義する)か
>あらかじめエクセルシートで用意できるなら
と書いてるだろ
これを受けてるから、エクセルシートにデータを展開しないような状態
つまりVLookup使えない想定での話だからな
VLookup使える状態でなおかつVBAを使う理由があるならVBAからVLookup使えば良いよ
0813デフォルトの名無しさん
2014/09/09(火) 17:24:47.32ID:WRZDH2Btだってfind()でrange取り回した方が楽じゃん(個人的感想)。
VBAでWorksheet関数を使うのは、VBAでは多くのコードが必要だがそれを使うと簡単に書ける場合のみ。
0814デフォルトの名無しさん
2014/09/09(火) 18:05:06.69ID:puhlfYKMソートは指摘の通りで勘違いっす。詳しく語るほどのものではないよ。
VLOOKUPで泣いたことがあるのでさ。
お手柔らかに。
0815デフォルトの名無しさん
2014/09/09(火) 21:12:21.83ID:jO0AVdbh>1つのKEYに対して二つの値を格納する事が "単純に" 出来るんでしょうか
KEYに対する値に「配列」を納めればいいだけじゃね
0816デフォルトの名無しさん
2014/09/09(火) 21:47:51.80ID:ACZnc7/qそれにしてもExcel VBAスレってプログラミング初心者ばかりだなw
0817デフォルトの名無しさん
2014/09/09(火) 21:58:11.28ID:CZR7MU0Jそりゃ上級者(笑)はこんなスレ見ないし他の言語触ってるからな
0818796
2014/09/09(火) 23:05:48.40ID:dbNyx8YK説明用に曜日で代用させていただきました。
実際のデータは曜日みたいに固定ではなく今後増える可能性があるので
>>808のselect caseというのがすごく分かりやすかったのですが
今後の汎用性を考えて>>797の方にしようと思います。
ただ、自分の頭で描いていたのは>>802のdictionaryのようです、が、
いまの自分には使いこなせ無さそう…
0819デフォルトの名無しさん
2014/09/10(水) 00:04:23.53ID:hwfl5E9s2つのディクショナリを使うのはいいけど、入れ子にするつもりなら
処理が煩雑になり易いのであまりお勧めはしません。
コレクションや配列、ユーザー定義やクラスを使ってやるのが面倒だというのであれば、
例えばディクショナリのキーに対応する値にカンマ区切りで文字列を結合し設定して、
取り出した後にカンマで分割して個々の値を取得する方法も有ります。
ただしこの場合は値にカンマが含まれないことが大前提になりますが。
0820デフォルトの名無しさん
2014/09/10(水) 00:53:36.79ID:1S40Q2ysみたいに、if文を条件式ではなく変数のように使うことはできますか?
if 定数>10 then
変数X=変数Y*変数Z
else
変数X=0
endif
でもいいのですが、同じような変数Xがたくさんあるとごちゃごちゃしてしまいます。
0821デフォルトの名無しさん
2014/09/10(水) 01:03:49.94ID:TSPWU44lIIf
0822デフォルトの名無しさん
2014/09/10(水) 02:02:58.88ID:vQJB8XDv0823デフォルトの名無しさん
2014/09/10(水) 03:41:50.70ID:1S40Q2ysわかりづらくてすまん
0824デフォルトの名無しさん
2014/09/10(水) 08:12:22.18ID:Q736+TvJ質問の意味がわからん
定数が変数の間違いだったとして
If 変数A > 10 Then
変数X = 変数Y * 変数Z
Else
変数X=0
Endif
なら
変数X = 変数Y * 変数Z * -(変数A > 0)
と書ける
0825デフォルトの名無しさん
2014/09/10(水) 08:14:00.90ID:Q736+TvJ変数X = 変数Y * 変数Z * -(変数A > 10)
の間違い
0826デフォルトの名無しさん
2014/09/10(水) 10:56:28.48ID:YIVN8ybq>>821で完璧な答えが出てるのに
何故にそんなにこの話題を引っ張るのか意味が分からん
変数X = 変数Y * 変数Z * iif(定数 > 10,1,0)
もちろん今回に限っていえば False の時に 0 だから
>>825みたいなやり方もあるけど、
True と False が両方とも0以外の場合には結局 IIF を使うことになる。
0827デフォルトの名無しさん
2014/09/10(水) 11:38:31.71ID:EEhzbKtFこの書き方嫌い
0828デフォルトの名無しさん
2014/09/10(水) 11:44:04.16ID:EEhzbKtF> 変数X = 変数Y * 変数Z * iif(定数 > 10,1,0)
なんでそんなに分かりにくい書き方するかなあ
素直に
変数X = IIf(10 < 定数, 変数Y * 変数Z, 0)
でいいと思うが。
0829デフォルトの名無しさん
2014/09/10(水) 11:55:05.01ID:lYSqptpV0830デフォルトの名無しさん
2014/09/10(水) 12:08:41.33ID:YIVN8ybq「Ifの判定結果を式に反映したい」という>>820の質問主旨に沿った書き方をしたまで、
Falseでゼロとかそういう特殊なケースではなく、汎用的に書いたら>>826のようになる。
0831デフォルトの名無しさん
2014/09/10(水) 12:37:27.07ID:EEhzbKtFああ、>>820 の一行目か
その下の If 文の奴しか見てなかったわ、すまん
0832デフォルトの名無しさん
2014/09/10(水) 14:43:11.11ID:lYSqptpV0833デフォルトの名無しさん
2014/09/10(水) 17:59:37.88ID:vQJB8XDv0834デフォルトの名無しさん
2014/09/10(水) 18:14:07.87ID:lNGO68IWどうやって死ねばいいでしょうか?
0835デフォルトの名無しさん
2014/09/10(水) 19:21:31.99ID:Jy7UXe/sAs Object
で宣言して使うのもダメかな?
実はそうしないと自力では解決できないものがあって
聞きたいんだけど
0836デフォルトの名無しさん
2014/09/10(水) 20:24:53.18ID:YIVN8ybqAs Object の何がいけないの?
俺も良くやるけど。
0837デフォルトの名無しさん
2014/09/10(水) 20:33:29.42ID:Jy7UXe/sごめんなさい 自分よくわかってないんですけど
>>833のいってる
暗黙の変換に該当するのかな と思って
0838デフォルトの名無しさん
2014/09/10(水) 20:39:22.73ID:YIVN8ybq多分>>833が言ってるのは
>>825みたいにTrueを-1、Falseを0として演算に使用することとか
文字列の数字に対して*1で数値化するとか、
そういうのを止めろという「>>833の個人的主張」でしょ
気にする必要ないよ。
0839デフォルトの名無しさん
2014/09/10(水) 20:48:58.34ID:Jy7UXe/sありがとうございます
そういう事ですか じゃ良いんだね すっきりしました。
ちなみに解決できないものって これだったりします。
こうしないとなぜか .writeで "コンパイルエラー"になるんですよね
これで解決してるから問題ないんだけど
Dim HTMLDoc As Object
Set HTMLDoc = New MSHTML.HTMLDocument
With HTMLDoc
.DesignMode = "on"
.Open
.write "<HTML><BODY>・・・・省略・・・・・</BODY></HTML>"
.Close
End With
0840デフォルトの名無しさん
2014/09/10(水) 20:57:20.35ID:vQJB8XDv>>833は>>825見たいな書き方は今時やめろって話
VB以前の大昔のBASICなら結構多用してたけどな
まあ、個人的な主張なのはその通りだがw
0841デフォルトの名無しさん
2014/09/10(水) 21:03:38.21ID:YIVN8ybq「こうしないと」の「こうしない」場合にどうしてるのか分からないけど、
As object 以外だと As Variant ってこと?
それとも
As MSHTML.HTMLDocument
って宣言してもエラーが出るの?
0842デフォルトの名無しさん
2014/09/10(水) 21:08:01.32ID:Jy7UXe/sDim HTMLDoc As MSHTML.HTMLDocument
だと .write で
コンパイルエラー
関数またはインターフェイスが予約されているか、
または Visual Basic でサポートされていないオートメーション タイプが関数で使用されています。
となるんです
いろいろ ググって見た所
As Object
にするといいよ ってのを見て今そうしてるのですが
0843デフォルトの名無しさん
2014/09/10(水) 21:23:19.48ID:YIVN8ybqおれはFileSystemObjectをよく使うんだけど、
あれはMicrosoft Scripting Runtimeを参照設定して
Dim fso As New FileSystemObject で宣言したほうが
参照設定なしで
Dim fso As Object で宣言して使うよりも
断然使いやすいから他のライブラリもそうだと思ってた。
どっちみちMicrosoft HTML Object Libraryの参照設定は必要なんだろうから
普通に考えたら As Objectよりも As MSHTML.HTMLDocument
のほうが良さそうなのにどうしてなんだろね?
0844デフォルトの名無しさん
2014/09/10(水) 21:30:36.75ID:vQJB8XDvHTMLDocument型で行けそうなのにダメだな
詳細はタイプライブラリどうなってるか調査すればわかるかもしれんが
もともとVBAで使う前提のコントロールじゃないからな
writeはIHTMLDocumentで宣言すると使えるらしい
0845デフォルトの名無しさん
2014/09/10(水) 21:38:40.98ID:Jy7UXe/sを!動く!
やっぱ聞いてみるもんだね
もっとも ググり方が 足らんって事だけど(反省)
ありがとうです。
0846デフォルトの名無しさん
2014/09/10(水) 21:50:50.45ID:Jy7UXe/s>もっとも ググり方が 足らんって事だけど(反省)
これ途中でめんどうになって 動けばいいやって やったって事
0847デフォルトの名無しさん
2014/09/10(水) 21:56:36.15ID:8S5VLuELIIFによる三項演算は重いんだよね。
だから.NetのVBでは別途IFによる三項演算ができるようになっている。
昔、使ったコード書いてたら、普通にIF文で書いた方が処理速いって言われたことがある。
0848デフォルトの名無しさん
2014/09/10(水) 23:00:38.21ID:vQJB8XDv遅いのは引数の評価だろ
0849デフォルトの名無しさん
2014/09/10(水) 23:14:56.95ID:wDsI5Vre昔の開発者はコンパイラがどういう最適化をしてどういうコードを出力するか知ってるのが普通だったけど。
それは中間コードを実行する仮想マシンでも同じなんだよ。
知っているか知らないかで10倍は速度が変わってくる。
0850839
2014/09/11(木) 01:39:29.34ID:QjgECpza>を!動く!
って喜んでたけど
Dim DOMDOC As MSHTML.IHTMLDocument
で宣言したら動くけど 候補表示出ないのね
Dim DOMDOC As New MSHTML.IHTMLDocument
もダメだし
やっぱVBAで利用するにはいろいろ工夫が必要みたいですね
以上 ご報告でした
0851デフォルトの名無しさん
2014/09/11(木) 09:02:58.27ID:FXbvu4fI0852デフォルトの名無しさん
2014/09/11(木) 09:10:13.73ID:awRn/eWy最近のWindowsは最初から入ってるから、別に参照設定せずとも、
レイトバインディングでやっても問題ない。
0853デフォルトの名無しさん
2014/09/11(木) 09:18:58.26ID:QjgECpza>IEからCSVをダウンロードして開く処理
状況がわからない
Excel VBAで IE操作したいと仮定するならIE使わないで
ExcelでCSV開いて保存等したらいいように思えるけど
CSVがインターネット上にあるのかな?
(URLDownloadToFileつうAPIあるよ)
0854デフォルトの名無しさん
2014/09/11(木) 09:22:22.62ID:awRn/eWyわざわざIE立ち上げて遠隔操作する必要はないわな
直接、URL叩いてCSVを貰えばいいわけだし。
0855デフォルトの名無しさん
2014/09/11(木) 09:38:23.87ID:tg37F+wX0856デフォルトの名無しさん
2014/09/11(木) 10:25:07.35ID:FXbvu4fI>>854
ちょっと今ソースが手元にないんですが、ログインする必要があるので、いきなりファイルのアドレスを叩けない条件です。
ひとまずは紹介していただいた
URLDownloadToFileというAPIを試してみます。ありがとうございます。
0857デフォルトの名無しさん
2014/09/11(木) 10:53:53.45ID:QjgECpzaその状況でURLDownloadToFile使えるかどうかは
やってみんと分からんな(Https だったりしたら使えるだろうか?)
自分もこれ使ってたの かなり前だし
で、昔使ってたやつの残骸みつけたので
一応技術情報
httpレスポンスヘッダ(こうゆう名前だったと思う)に
Cache-Control: no-cache
があると失敗するようです。(たしかエラーには ならなかったと記憶してます)
0858デフォルトの名無しさん
2014/09/12(金) 06:37:39.10ID:BK9CuCos最近VBAあまり使ってないから分からないんだけど、
遅延バインディングって使うと処理が遅くなるのはまぁ仕方ないとして、
インテリセンス的にはどうなの?そもそもVBAのインテリセンスはしょぼいから
効いても効かなくても余り関係ないって感覚?
0859デフォルトの名無しさん
2014/09/12(金) 07:54:06.11ID:ImIRtw90後入れモジュールでは最初からあきらめてる
0860デフォルトの名無しさん
2014/09/12(金) 21:26:53.98ID:8FOfXnnFこちらで質問させていただいてもよろしいでしょうか
0861桃白白 ◆9Jro6YFwm650
2014/09/12(金) 21:27:16.95ID:9osvpauLいいと思うよ。
0862デフォルトの名無しさん
2014/09/12(金) 21:42:28.27ID:8FOfXnnFありがとうございます
業務簡略化のためにVBAを勉強してコードを組んでいるのですが
きれいなコードを書くのが苦手で、自分でもなにを書いているのかわからなくなる時があります。
変数をローマ字一文字にしてしまうとさらにわけがわからなくなったので
ある程度なんの変数なのかわかるように工夫はしてみたのですが余計に混乱してしまいます…
それほど難しいコードを組んでいるわけでもないのですが
たとえば下のコードをもっときれいに組む方法ってあるでしょうか?
よろしくお願いいたします。
Public Sub New_Rolling_Issue()
Dim Setting_Down As Integer
Dim Loop_Down As Integer '行のループ番号を格納する変数
Dim Loop_No As Integer '列のループ番号を格納する変数
Dim End_Count As Integer '請求書書式の行数を確認する変数
Dim Print_Flag As Integer
Application.ScreenUpdating = False 'マクロ実行中の画面の描画を停止
Call Invoice_Formula_Reset
With Worksheets(Invoice_WS)
Setting_Down = Worksheets(Setting_WS).Cells(Rows.Count, 2).End(xlUp).Row + 5
For Loop_No = Start_No To End_No Step 2 '【工事一覧入力】の部屋番号列を左方向に向かって1行飛ばしで格納数を変更
.Cells(6, 12).Value = Worksheets(Input_WS).Cells(3, Loop_No).Value '【請求書印刷】の請求書発行No.を【一覧入力】に基づいて変更
Print_Flag = 1
.Range(Itemize) = "" '請求書明細をクリア
End_Count = 9
For Loop_Down = 13 To Setting_Down '【一覧入力】の数量行を下方向に向かって格納数を変更
0863デフォルトの名無しさん
2014/09/12(金) 21:43:07.88ID:8FOfXnnFIf Worksheets(Input_WS).Cells(Loop_Down, Loop_No).Value <> "" Then '【入力一覧】の数量行に数字の入力があるか確認
.Cells(End_Count, "B").Value = Worksheets(Input_WS).Cells(Loop_Down, "C").Value ' あれば【請求書印刷】の摘要欄に名称を入力
.Cells(End_Count, "E").Value = Worksheets(Input_WS).Cells(Loop_Down, Loop_No).Value '【請求書印刷】の数量欄に数量を入力
End_Count = End_Count + 1 '【請求書印刷】の行数チェックの変数に+1
If End_Count = 17 Then '【請求書印刷】の行数が規定まで達したら手動発行メッセージ表示
MsgBox "請求書発行No." & Cells(6, 12) & "は手動で発行してください。", vbExclamation, "確認"
Print_Flag = 2
Exit For
End If
End If
Next Loop_Down
If Print_Flag = 1 Then
ActiveSheet.PrintOut
End If
Next Loop_No
End With
Application.ScreenUpdating = True '画面の描画を再開
End Sub
0864デフォルトの名無しさん
2014/09/12(金) 22:07:07.99ID:besSWj6Wコメントが適切かどうかは別にして、まったく知らない人が上から順にコメントだけ見て、何をやっているのかすぐ分かるようなプログラムが良いプログラム。
分かりにくいプログラムは、たいてい言葉でプログラムの構造がうまく説明できないものになっている。
0865デフォルトの名無しさん
2014/09/12(金) 22:10:51.70ID:besSWj6W変数名がダメダメだから、明日ひまなときにレスするよ。
0866デフォルトの名無しさん
2014/09/12(金) 22:17:54.53ID:besSWj6W数はNo、Num、Number。
値がtrue、falseになるような変数は、フラグ変数といいます。flagです。
0867デフォルトの名無しさん
2014/09/12(金) 22:24:57.66ID:6MSsZNQAまず、変数は良いとしても、処理説明のコメントを右に書くのは基本無しだ。
読み辛いこと甚だしい。もし、レス向けに詰め込んだだけならすまん。
次に、コメント書くならもう少し大きい単位で。
この場合なら「【工事一覧入力】の内容を列毎に【請求書印刷】に移して印刷」って感じのを
関数のコメントにでも書いておけば十分かと。
あとは、規定数チェックの補足コメントと、各移送部分に項目名をメモ代わりに付けるくらいか。
変数名が長い割に無意味なのも気になるけど、それは>>864-866に任せたw
0868デフォルトの名無しさん
2014/09/12(金) 22:29:40.60ID:8FOfXnnF>>864
本当に自分でもわからなくなる時があるので…もっとわかりやすくコメントを書いてみます
>>865
変数やはりダメダメですか
ぜひ参考にさせていただきます。
>>866
rowとcolumnでしょうか
行数や列数の変数のときはRow_Noなどにした方がよいですか?
PrintFlagに関しては試行錯誤でなぜかそれを入れないと動かなくなってしまったので…
いろいろと精査してみます、ありがとうございます。
0869デフォルトの名無しさん
2014/09/13(土) 02:10:36.52ID:aRKTTaf3わかりにくいと感じるのは、実際のワークシートや印刷ページを見てないからだと思う
単にデータを並べ替えてるだけみたいだし、たぶん実際のシートを見れば何やってるか一目瞭然だと思う
まあ変数名はもうちょっと考えてもいいかもしれんが
>>868
変数名は、悩むぐらいなら無理に英語にせずに日本語で書けばいい
こう書くと日本語の変数名には絶対反対と言うやつも出てくるけど、コーディング規則なんて宗教みたいなもんだからなあ
何を信じるかは個人の自由
あと、コメントは例えば
「行のループ番号を格納する変数」
じゃなくて
「行番号を格納するループ変数」
みたいに書くかな、俺なら
0870デフォルトの名無しさん
2014/09/13(土) 02:27:59.39ID:0I+zc03Nどっかコード貼り付けできるサイト使えよ
変数名とかコメントとかいろいろ言われてるけど俺的には
Worksheets(Input_WS) これが一番気になる
Input_WSはシート名の文字列か順序の数字なんだろうが
シートそのものを変数に入れろよ
初心者なら、変数名まよったらいっそ日本語で付けてみるのも有りだぞ
0871デフォルトの名無しさん
2014/09/13(土) 03:46:05.14ID:FgbmXmAB> シートそのものを変数に入れろよ
まあ、言いたいことはわかるが、このレベルとしては Active〜 に頼ってないのは誉めてもいいと思う
なので、
> MsgBox "請求書発行No." & Cells(6, 12) & "は手動で発行してください。", vbExclamation, "確認"
と
> ActiveSheet.PrintOut
は、ちょっとおかしいかな
0872デフォルトの名無しさん
2014/09/13(土) 03:55:30.91ID:aRKTTaf3https://friendpaste.com/7iW6FESeuW3vqGQb1Y08Vz
0873デフォルトの名無しさん
2014/09/13(土) 04:04:20.35ID:aRKTTaf3俺なら「印刷用のシートをActiveSheetにする」と決めてコーディングする
先頭の方でActiveSheetをコメント付きで明示して
Worksheets(Invoice_WS).Activate ' 印刷用シートをアクティブにする
データのコピー元シートは2枚あるので、Withは使わずにオブジェクト変数に入れる
まあ全シートを省略せずに書いた方が間違いは減りそうだけど
0874デフォルトの名無しさん
2014/09/13(土) 04:10:01.22ID:FgbmXmAB> 俺なら「印刷用のシートをActiveSheetにする」と決めてコーディングする
それなんかメリットあるの?
印刷前に内容表示して印刷するかどうかを確認するとかならわかるけど、今回はそうではなさげだし...
0875デフォルトの名無しさん
2014/09/13(土) 04:22:56.22ID:aRKTTaf3別にどれをActiveにしてもいいんだけど、ExcelではActiveシートを無視することはできてもなくすことはできないから、
どれにするか決めて活用した方がコーディングが楽になるよねっていう単なる経験談
今回のケースではコードが短かすぎて恩恵が少ないけど
0876デフォルトの名無しさん
2014/09/13(土) 04:28:55.43ID:aRKTTaf30877デフォルトの名無しさん
2014/09/13(土) 07:38:05.77ID:FdxK6FtY0878デフォルトの名無しさん
2014/09/13(土) 09:58:16.95ID:/Kh9xLWLすでにほかの方がおっしゃってるものも含めて私が個人的に感じたことです。
1.コード云々以前の問題として宣言されていない変数名が複数見受けられます。
Invoice_WS、 Setting_WS、 Input_WS、 Itemize、 Start_No、 End_No、は宣言無しで使われています。
(プロシージャ外で Public で宣言されているのかもしれませんが、その場合でも質問時には貼り付けておくべきです)
2.コメント内でのシート名の表記が統一されてないようです。
【工事一覧入力】、【一覧入力】、【入力一覧】、は
すべて Worksheets(Input_WS) を指しているようですから、どれかに統一した方が良いと感じました。
3.変数名のつけ方として、行を格納する変数なら Down ではなく Row、
列なら No ではなく Column に統一したほうが他人が見たときにわかり易いと思います。
また、見たところ Loop_Down も Loop_No も Worksheets(Input_WS) 内の情報だけを対象にしていますから
それも踏まえて Loop_Down は Input_Row、 Loop_No は Input_Column、のほうがよりわかり易いのではないでしょうか。
4.セル位置の指定方法として Cells(数字,"アルファベット") と Cells(数字,数字) が混在しています。
可読性の点や好みの問題もあるのですが、列指定にアルファベットを用いるのは
私はせいぜいA〜Zぐらいまでの範囲でしか使い物にならないと感じています。
今回はその範囲に収まっているのですが、列を変数で指定する事(たとえば貴方も Loop_No を使っています)も考えると、
Cells(数字,数字) のほうがよろしいかと思います。
5.Flagは一般的にはBoolean型変数を使います。
これらを踏まえて書き直してみました。
https://friendpaste.com/7iW6FESeuW3vqGQb1Xrb7I
勝手に付け足した部分には''で注釈を入れてます。
0879デフォルトの名無しさん
2014/09/13(土) 10:17:51.44ID:aRKTTaf3セルの指定方法については考え方が逆だな
A-Zは脳内で数字に変換できるけど2文字以上は暗算が困難だから、既存の表からデータを拾う場合は文字で指定した方が確実
0880878
2014/09/13(土) 10:33:57.30ID:/Kh9xLWLそういうケースもあるのですね。
私の業務では行方向に0.1秒刻みとか1秒刻みで24時間分(86,400行〜864,000行)、
列方向に1日あたり複数の測定項目で1か月分(大体150列ぐらい)のデータが並ぶ、
といった帳票を処理するので、そういう場合には列指定がアルファベットだと仕事にならないわけです。
0881デフォルトの名無しさん
2014/09/13(土) 10:43:28.37ID:FgbmXmAB> どれにするか決めて活用した方がコーディングが楽になるよ
あとから見るときとか、回収するときに面倒になること多いから、俺は全てにシート指定をする
まあ、こっちも単なる経験則だが
>>880
相当特殊な例だし、連続した内容読むなら数値でやるのは当たり前
>>879 が言ってるのは、帳票の一部からデータを読み取るとかの話でしょ
俺は固定した場所に書き込むときも A1 形式で指定したりする
0882デフォルトの名無しさん
2014/09/13(土) 10:52:02.24ID:zlWFdsfJ>>878さんのコードを見本に皆様の意見を踏まえて、よりわかりやすく自分に合ったコーディングをしたいと思います。
この請求書印刷マクロも何度も何度も修正はかけていたのですが…ダメダメでまだまだ勉強が必要だと感じました。
今回修正していただいた方法を他のマクロにも生かしたいと思います。
昨日アップしたマクロに関連するコードを下記にアップしてみました。
質問する上で最初に全てアップすべきだったと思います。
すみませんでした。
https://friendpaste.com/7iW6FESeuW3vqGQb1XraDv
0883878
2014/09/13(土) 14:31:07.43ID:/Kh9xLWLフォーム上から呼び出すプロシージャを変えるよりも、フォームで得られた値を返り値として
標準モジュール上で処理を分岐させるほうがコード全体の見通しが良くなる気がします。
通常、フォームモジュールと他のモジュール間での値の受け渡しにはパブリック変数を使うことが多いようですが、
変数はなるべく狭い範囲で使うに留めたいので、ユーザーフォームをUnloadしないでHideで制御を標準モジュールに戻します。
そうすると、フォームは見えないだけで内部の変数(Textboxの値など)は保持されていますので、
ユーザーフォームのオブジェクト名(今回ならfrm新発行確認)に続けてオブジェクトを指定すると値が取り出せます。
ということで、フォーム上に"発行開始請求書No."を入力する Textbox1、と
"発行終了請求書No."を入力するTextbox2、を用意して、フォームを閉じるボタンとしてToggleButton1 を用意します。
その他、Textboxに対する説明のLabelなどは適宜追加してください。
なお、フォームを閉じるのが CommandButton でなく ToggleButton なのは、キャンセル処理に対応するためです。
こうしておけばトグルボタンで閉じたときには処理続行、フォーム右上の×で閉じれば処理キャンセルという風にできます。
ということで、以下のコードは、>>882とほぼ同じ動作になります。
(開始終了の値の大小チェックや、数字以外の入力を受け付けないような処理が追加されてます)
https://friendpaste.com/1HbxD0LtNlfpEianBbT7wG
0884デフォルトの名無しさん
2014/09/13(土) 14:47:09.05ID:eg/hmqYy何でもかんでもちゃんとした変数名を付けるのって無意味な上に読みにくい。
単なるループカウンターなら i 、j、k
セルを扱うループカウンターなら r、c
あと外人に見せるのでなければ、
変数名に漢字も使えるから漢字を使う。
個人的には、
×:Print_Flag
○:PrintFlag
○:print_flag
■コメントの付け方について
VBAだ設計書を書かないでいきなりコーディングする場合が多いと思うけど、
コードを書いてからコメントを入れるのは間違い。
処理の流れをコメントでざっくり箇条書きした後に、
実際のコードを挿入してゆくと仕様不良や漏れが起きにくい。
特定の行の後ろに入れるコメントは、
・分岐箇所の条件が分かりにくい場合
・マジックナンバーが埋め込まれている等、なんからの前提条件が変わった時に、影響を受ける記述がある場合
以外は書かないほうがいい。
設計書が無いときに、コードとコメントが不整合になりやすく、どちらが正しいのか他人には判別しにくいから。
0885883
2014/09/13(土) 15:36:02.43ID:/Kh9xLWLよって正しくはこのようになります。
Private Sub TextBox1_Change()
'数字以外の入力は無視する
If Not IsNumeric(TextBox1.Value) Then
TextBox1.Value = ""
End If
If TextBox1.Value < 1 Then
TextBox1.Value = ""
End If
End Sub
Private Sub TextBox2_Change()
'数字以外の入力は無視する
If Not IsNumeric(TextBox2.Value) Then
TextBox2.Value = ""
End If
If TextBox2.Value < 1 Then
TextBox2.Value = ""
End If
End Sub
0886デフォルトの名無しさん
2014/09/13(土) 23:16:27.49ID:aRKTTaf3変数名の大文字小文字と単語間の区切り方はプロジェクト単位で統一されてればどうでもいい派
それぞれの流儀にちゃんと名前もある
http://blog.nabe-ch.net/?p=1300
個人的にはN-BASICから入った人間なので1文字で済まそうとする悪い癖がいまだに抜けない
0887デフォルトの名無しさん
2014/09/14(日) 00:00:10.24ID:1/4H8AQnユーザーフォームの値をそうやって使うことが出来るんですね…!
本当に勉強になります。ありがとうございます。
変数名については、i r j など使っていたのですが
どうにもパッと見た時に頭が混乱してしまうので、長ったらしくつけてしまっていました。
Down、Leftなどもそのループ変数が進んで行く方向を書くと分かりやすくなるかな、という考えでつけてしまいました。
みなさんに見ていただけて、本当によかったです。
ありがとうございました!
0888デフォルトの名無しさん
2014/09/14(日) 05:35:46.61ID:7t/oowuMN-BASICからって、VBAは構造化言語なんでちょっと苦労してるはず。
当時は普通に使ってたGoto文とかも今使うとSHINE!って言われるし、GoSubもそう。
しかも中途半端にObject指向が取り入れられたりしてるから尚更だよね。
Object指向言語を勉強する時はこっちももっと苦労したよ。
しかも.Netフレームワークとか、今度は中途半端に関数型言語の考え方とか取り入れられているからもう鼻血もの。
未だに匿名メソッドとかLinqとかラムダ式とかよく分かっていない。
もうじじいだから頭硬いんだろうね。今の若い者達には勝てないよ。
0889デフォルトの名無しさん
2014/09/14(日) 12:16:24.71ID:eEPUWsuq読みやすいコードを書くにはもっと大事なテクニカルな部分があるじゃん。
変数のスコープはなるべく狭く、一つ一つのプロシージャは極力小さく単純に、
繰り返す処理はSubやFunctionにまとめてメインから呼び出す形に、
みたいな事のほうが効果有るんじゃないか?
今回の例で言ったら
>>878よりも>>883のほうがより本質的な改善策だと思う。
0890デフォルトの名無しさん
2014/09/18(木) 13:02:01.89ID:yoMUPDG3オブジェクト名 list_month
List_Style 0-fmListStylePlain
MultiSelect 0-fmMultiSelectSingle
Height 25
Width 40
TextAlign 2-fmTextAlignCenter
で、青色で示している水平のスクロールバー(?)は要らないんで
消したいんですが、どのプロパティを設定すれば良いんでしょうか?
http://www.dotup.org/uploda/www.dotup.org5319680.jpg
0891デフォルトの名無しさん
2014/09/18(木) 13:39:23.62ID:RJkooT4yColumnWidthsを小さくする
0892デフォルトの名無しさん
2014/09/18(木) 13:46:49.71ID:yoMUPDG3早速ありがとう!
ColumnWidthsは何も値が入ってなかったんで見落としていました。
0893デフォルトの名無しさん
2014/10/07(火) 22:02:49.50ID:UxKxr3/d0894デフォルトの名無しさん
2014/10/07(火) 22:48:56.91ID:RobPNZjk0895デフォルトの名無しさん
2014/10/14(火) 20:07:50.71ID:o+CwTykR,.-─-、
/ /_wゝ-∠l
ヾ___ノ,. - >
/|/(ヽY__ノミ
.{ rイ ノ
パーン l>‐∠l
,.-─-、∩/,. - >
//。wv、ゝヾヽY__ノミ 甘ったれるなガキ
ヾ__Д(☆ ミ⊃ ヽ
/∨ (ヽ
0896デフォルトの名無しさん
2014/10/16(木) 17:20:44.49ID:iJso0Pxmhttp://ww10.puny.jp/uploader/download/1413447454.xlsm
pass excel
通常の処理として、コンボボックスで何かを選択した後閉じる分には問題ないの
だけれど、たまたま、この画面を開いてしまったとかで何もせず閉じようとすると、
Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If ComboBox1.ListIndex = -1 Then
MsgBox "未設定"
End If
End Sub
のメッセージが出てしまう。
これを出さなくする方法ってありますかね(勿論、チェックするために必要なんで
このチェック処理無くすってのは無しで)
0897デフォルトの名無しさん
2014/10/16(木) 20:22:31.76ID:2oOPO/RwRem MsgBox "未設定"
0898デフォルトの名無しさん
2014/10/17(金) 04:26:30.46ID:y4CtUirlまず、たまたま開いただけか、入力する気で開いたのか判別する方法を教えてくれ
0899デフォルトの名無しさん
2014/10/17(金) 06:44:07.25ID:rHAjq+BO0900デフォルトの名無しさん
2014/10/17(金) 07:39:01.86ID:Ja87/ZF2人間の頭の中の認識が違っても、PCやExcelから見た操作や入力内容などの取得情報が全く同じなら
それをトリガーとした動作に恣意的な変化を付けることは出来ないってことを理解してないのかな?
それとも
入力しようとしてコンボボックスを開いて、何も選択しないままに閉じてしまった場合と
入力するつもりが無いのにコンボボックスを開いてしまったので、そのまま何も選択せずに閉じた場合は
人間の頭の中の認識が違っても、PCやExcelから見たら
コンボボックスを開く → 何も選択せずに閉じる
と全く同じ操作が行われてるってことに気付いてないのかな?
なんにしろ、間違って開いた場合はEscで閉じるとかなら、Escで閉じた場合は
リストからの選択が無くても警告を出さないとかは出来るけど、PEやExcelが取得できない
人間の頭の中の意識の違いで動作を別々にするのは、少なくとも現在は不可能だ
0901デフォルトの名無しさん
2014/10/22(水) 11:26:45.66ID:QHaFGxJ2とりあえず、青木ヶ原かどこかへ行った方が良い
ここでは君のような池沼は扱っていない
0902デフォルトの名無しさん
2014/11/01(土) 17:17:50.18ID:bp5t6r+/<div ・・・>
<a ・・・>
<img ・・・>
</a>
</div>
<div>
こんな感じでスタイルシートで見た目いじられてる画像リンクを
Call tagClick(objIE, "a", "・・・")
てな具合でクリックさせようとしてもうまくいかないんだけどどうしたらいいんですか?
同じようにスタイルシートで見た目がいじられてるフォームのセレクトボックスなんかも
指定した物を選択できないんだけど。どうしたらよいかな?
0903デフォルトの名無しさん
2014/11/02(日) 00:14:48.37ID:rDboXmne0904デフォルトの名無しさん
2014/11/02(日) 00:45:39.44ID:PgL+4J3A0905デフォルトの名無しさん
2014/11/02(日) 14:48:49.85ID:cILil4Ru<div ・・・>
<div ・・・>
<a ・・・>
<img ・123・>
</a>
</div>
<div>
こういうのが沢山並んでるページなんですよ。
そこに同じ形式の新しい画像とリンクが追加されるんですが、それをいちはやく検知してページ移動したいんです。
新しく追加される画像の数字は分かっているので、その追加される画像の数字をキーにして自動クリックすれば
よいかと思ったんですが、他にどうしたらいいんですか?教えて欲しいんです。
0906デフォルトの名無しさん
2014/11/02(日) 17:49:42.79ID:LJiIea3eAタグの中にクリック先のURLが書いてあるから、それでページを開けばいいと思うんだけど
0907デフォルトの名無しさん
2014/11/02(日) 18:08:05.82ID:cILil4Ru指定したimgの上にあるaタグのURLを拾うにはどうしたらよいんでしょうか?
こういうページ見れば分かるよ。というのでも良いので教えてもらえませんか?。。
自分で検索してしらべる気が無いわけじゃないんですが、、どんな語句で調べたらいいか想像できないので。。。
0908デフォルトの名無しさん
2014/11/02(日) 18:57:05.70ID:1i7yShpWVBA ie 画像とかVBA HTML 画像
あたりかな?
0909デフォルトの名無しさん
2014/11/02(日) 19:01:51.89ID:cmFa2MAAhrefプロパティ
つかどこまで取得できてるの?
指定したimgタグまで?
その上のaタグまで?
それ以前?
0910デフォルトの名無しさん
2014/11/02(日) 21:05:29.52ID:cILil4Ru>>909
取得とは?
ページに新しい画像とそのリンクが追加されたら、その新しい画像をクリックしてリンク先に移動したいって話だったんですが、
<div>で囲まれてるのでクリックが出来ないんですよね。同ページにある<div>で囲まれてない画像&リンクはクリックできるんですが。
新しく追加される画像のurlは予め分かるので、それをキーにして、その画像に設定してあるリンク先に移動する方法がないかなと
思っていたんです。もちろん<div>で囲まれてる場合になにか特別なクリック方法があるならそれを教えてもらいたいですけど。
みさんの話聞いてなんとなくだけどLinkプロパティを利用して、ページ内の全てのリンクとその要素みたいなものを取得して、
その中に指定した画像があった場合のそのリンクを取り出して、そのURLを新たにブラウザにセットするようにすればいいのかなって思いました。
下のページ参考にして自分でやってみます。
http://www.ken3.org/cgi-bin/group/vba_ie_link.asp
やっぱもっと簡単な方法あるなら教えてもらいたいですけどw
とりあえずありがとうございました。
0911デフォルトの名無しさん
2014/11/03(月) 21:46:38.79ID:Umtu/gcR自力で 出来たかな?
出来たのなら良いんで 下記は無視してくれていい
※>新しく追加される画像のurlは予め分かるので、それをキーにして
この判断基準が示されてないので下記コードは適当に判断させてるのでそこは変えて
For Each ImgTag In ObjIE.Document.all.tags("IMG")
'画像のURL(ImgTag.src)をチェックして 処理対象か判断
If ImgTag.src Like "*123*" Then
'その親(Aタグになる)を参照する
Set Atag = ImgTag.parentElement
'クリック
Atag.Click
Exit For
End If
Next
上がダメなら
Atag.Click
↓
objIE.Navigate Atag.href
に変更してみるといいかも
変更してもダメなら 実際のURL(又はソース) 晒してくれんと難しいかも
0912デフォルトの名無しさん
2014/11/04(火) 16:36:30.39ID:NYEGko4Aありがとございます。
ネットにまとめられてる物をコピペしてどうにかならないかなと思って始めたんだけど、
ちょっと無理そうなので、あと後この本買って読んでたんです。
http://www.amazon.co.jp/dp/B00CPGWYRE/
いろいろ新しい事も分かったんだけど、parentElementっていうので指定したIMGタグの前のタグの内容参照
できるっていうのは載ってなかったし、それ私のやりたかったことそのままズバリなのでうれしいです。
じゃ、がんばってみます。
返信くれた方みなさんありがとう。
0913デフォルトの名無しさん
2014/11/04(火) 20:17:53.66ID:v0C//jJNあとDOM回りはJavaScriptの本が参考になるかもしれん
つか、ブラウザオブジェクト専用スレだれか立ててくれよと
0914デフォルトの名無しさん
2014/11/05(水) 16:51:58.30ID:8yVwR8VUHTMLはなんとなく分かってるつもりだったから必要ないかなって思ってたんですよね。
CSSとかそういうの分からないけどどうにかなるだろうって思ってて。。
結局その辺でうまく動かせなかったみたいだけど。
HTMLを操作するのはDOMっていうんですね。
DOMのプロパティ、メソッド一覧を検索したら色々出てきたんで参考になりそうです。ありがとう。
0915デフォルトの名無しさん
2014/11/09(日) 19:07:15.12ID:bYYOkq7I環境:Windows Vista SP2、Excel2007、IE9
参照設定:Microsoft Internet Controls、Microsoft HTML Object Library
これで、
Sub Test()
Dim ie As InternetExplorer
Dim doc As HTMLDocument
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.Navigate "http://www.google.co.jp/"
Do While ie.Busy Or ie.ReadyState < READYSTATE_COMPLETE
DoEvents
Loop
Set doc = ie.Document
End Sub
を実行すると
Set doc = ie.Document の所で実行時エラー13「型が一致しません。」に
なってしまうのですが、原因が分かりません。
どうしたらエラーを解消できるのでしょうか。
0916デフォルトの名無しさん
2014/11/09(日) 19:20:12.35ID:XD0yYqPYうちでは、そのプログラムをそのままコピペして問題なく動いた
どっかで名前が被ってるんじゃない?
試しにOption Explicit入れてみるとか、ほかのプロシージャがまったくない環境で試してみるとか
0917デフォルトの名無しさん
2014/11/09(日) 19:50:02.35ID:l6xIdWWi' WindowsAPIのSleep関数を使える様にする
#If VBA7 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr) ' 64ビットの場合
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
#End If
'IEの処理完了を待つ
'objIE = 対象のIEオブジェクト
Sub waitIE(ByRef objIE As Object)
Dim timeout As Date
timeout = Now + TimeSerial(0, 0, 10)
Do While objIE.Busy = True Or objIE.ReadyState <> 4
DoEvents
Sleep 100
If Now > timeout Then
objIE.Refresh
timeout = Now + TimeSerial(0, 0, 10)
End If
Loop
timeout = Now + TimeSerial(0, 0, 10)
Do Until objIE.Document.ReadyState = "complete"
DoEvents
Sleep 100
If Now > timeout Then
objIE.Refresh
timeout = Now + TimeSerial(0, 0, 10)
End If
Loop
End Sub
0918915
2014/11/09(日) 20:33:29.05ID:bYYOkq7IとりあえずOption Explicitを入れ、他のプロシージャが無い環境で試しましたが、
エラーになりました。
917さんのwaitIEも組み込んでみたのですが、やはりエラーになってしまいます。
パソコンに問題があるんですかね・・・
0919デフォルトの名無しさん
2014/11/09(日) 21:11:53.48ID:9syGSjJ1型が違うんかね
Set doc = ie.Document
ここのところを
Dim d As Variant
Set d = ie.Document
Debug.Print TypeName(d)
こうして型を出力してみるのがいいと思います!
0920デフォルトの名無しさん
2014/11/09(日) 22:15:08.14ID:wHnpXD4s何か単純な見落としがあるのでしょうか。
0921デフォルトの名無しさん
2014/11/09(日) 22:17:43.11ID:pLP/Mh4BOSとオフィスは全部32ビット?
なにかほかの参照設定があるとか?
0922915
2014/11/09(日) 23:19:47.10ID:CuiATemiExcelは2007なので、32bitかと。
お手数をおかけします・・・
0923デフォルトの名無しさん
2014/11/10(月) 00:06:49.63ID:z7aClQLS"どっかで名前が被ってるんじゃないか?" ぐらいしか原因が思いうかばんよな
これでどうなります?
下は >>915から変数定義を
�@ie → x_Ie
�Adoc → x_Doc
�BAs HTMLDocument → As MSHTML.HTMLDocument
にしただけ(変数名が 変なのは あえてそうしてます)
Option Explicit
Sub test()
Dim x_Ie As InternetExplorer
Dim x_Doc As MSHTML.HTMLDocument
Set x_Ie = CreateObject("InternetExplorer.Application")
x_Ie.Visible = True
x_Ie.Navigate "http://www.google.co.jp/"
Do While x_Ie.Busy Or x_Ie.readyState < READYSTATE_COMPLETE
DoEvents
Loop
Set x_Doc = x_Ie.Document
End Sub
これでもしOKなら
1つずつ元に戻してテストして
エラーになったらそれが原因かな?
0924デフォルトの名無しさん
2014/11/10(月) 00:16:31.19ID:uecfPeMa0925デフォルトの名無しさん
2014/11/10(月) 02:55:02.00ID:+hnXo7v464ビットOSだと、IEも32ビットと64ビット両方あったはずだけど
CreateObject("InternetExplorer.Application") だとどっちのIE上がってるんだろうな
>>923
だったら
As InternetExplorer も
As SHDocVw.InternetExplorer
にしてみればいいんじゃないかと
0926915
2014/11/10(月) 06:20:59.45ID:gPwXD5b/Navigate2でもエラーでした。
As SHDocVw.InternetExplorerにしてもダメでした。
IEは32bitが上がってます。
0927デフォルトの名無しさん
2014/11/10(月) 07:18:20.31ID:aSG9FVajテスト用のURLをGoogle以外にしてない?
0928デフォルトの名無しさん
2014/11/10(月) 13:24:06.01ID:+hnXo7v4COMで使うHTMLDocument って結構怪しくて、IHTMLDocument2だったり4だったりにしないとダメな時もあったり
ie.DocumentはObject型で定義されてるんだよな
docをObjectで宣言しとけば動くとおもうけど
0929915
2014/11/10(月) 23:10:11.52ID:9JtejioHテスト用URLはGoogleにしてますし、Googleも表示されます。
Objectにすると、とりあえずは動くのですが、後工程で
書き込みできません。とエラーが出てしまいます・・・
とりあえずIEやHTML関係の知識が足りてないことが分かりましたので、
諦めます。
皆さまありがとうございました。
0930デフォルトの名無しさん
2014/11/11(火) 20:22:58.57ID:gCIP5OCR0931デフォルトの名無しさん
2014/11/27(木) 10:24:11.52ID:pN0lS+lX0932デフォルトの名無しさん
2014/11/27(木) 20:53:43.99ID:xl4clNpl0933デフォルトの名無しさん
2014/12/12(金) 18:13:07.94ID:7Cw2fkerその効果の程は疑わしい
0934デフォルトの名無しさん
2015/02/01(日) 00:25:53.59ID:kv5uaIu+そもそも“マクロ”とは何か?
■――――――――――――――――――――――――――――■
“マクロ”とは、パソコンで仕事や、何かビジネスをされている方
にとってはとても便利なものです。マクロを使うと、これまで何時
間も掛けてやっていた大量データのパソコン作業が一瞬で終わりま
す。しかも、一度マクロを組んでしまえばマクロは決して人間のよ
うなミスは一切しないというスグレモノなのです。
ですから、自分でマクロを組めるようになると、早くて正確な仕事
のできる人になれますし、当然、ミスも無くなります。
また、企業が求める人材となり、転職・再就職が断然有利になると
いうことは言うまでもありません。
0935デフォルトの名無しさん
2015/02/01(日) 00:26:40.51ID:kv5uaIu+“マクロ”(=プログラミング)は勝ち組の共通スキルだ!
■――――――――――――――――――――――――――――■
将来のためにも「プログラミング」のスキルを身に付けておく、
ITで勝利する為の武器を備えておく、これは今時の成功者には皆
共通するスキルです。
あのアップルのスティーブ・ジョブスも、マイクロソフトのビル・
ゲイツも、Facebookのマーク・ザッカーバーグも、ソフトバンクの
孫社長も、mixiの笹原社長も、グリーの田中社長も…皆さんそこを
通って来ました。彼らが大富豪になるために共通して持っていたス
キル、それが「プログラミング」なのです。
自分の意思で自由にパソコンに仕事をさせる「自分のアイデアを実
現する手段を手にする」これこそが重要、且つ、必修なワケです。
それがあって、且つ、何かよいアイデアを思いついた人だけが、そ
れこそ数千億円の資産を手にする大金持ちの成功者となって行くの
です。アイデアだけではダメなのです。その実現手段であるスキル
を持っているということが非常に重要になるのです。
あなたはパソコンをただ“使うだけ”の人でいいのですか?
0936デフォルトの名無しさん
2015/02/01(日) 06:39:13.32ID:Zdr4/0x60937デフォルトの名無しさん
2015/02/01(日) 07:30:07.69ID:Oy9MlKBGいきなりどうした?
どこかのスレでマクロ云々でボコられて悔しかったのか? w
0938デフォルトの名無しさん
2015/02/01(日) 07:45:38.16ID:5BKa3EROVBAなんてスキーとかバイクみたいなものだよ
現時点で全ての人が出来るわけじゃないし、極めるのはそれなりに難しいが
本気でやろうと思って尚、全く出来ない奴など殆ど居ないような程度のもの
それに、マクロは仕様に対してはミスはしないが、やりたいことに対しての錯誤は起り
それは目的に対してはミスと同じもの
だってマクロは人間が組むものだから、マクロはミスしなくてもマクロを組む人間がミスしたら
マクロが返す結果にもミスが起るし、マクロがいくら仕様に忠実でも、小数誤差のように
仕様自体が人間の一般的な要求と一致してない場合、その仕様を把握して対策をしなければ
結局目的に対して結果が錯誤することになる
それに、大事なのは言語知識よりも発想発案能力で、その出力先がプログラムコードじゃなく
芸術だったり経営計画だったりしても、優れた発想発案能力を持つものは成功するし
いくら言語知識に精通していても、与えられた仕様を忠実にコード化するだけで
自分で優れた発想発案が出来ない奴は、プログラミングが出来てもTI奴隷、IT家畜留まりだよ
と、夢見すぎなアフォに、つい熱く語ってしまったw
0939デフォルトの名無しさん
2015/02/01(日) 09:55:15.70ID:MAX0CYaX0940デフォルトの名無しさん
2015/02/01(日) 10:00:00.48ID:np8qOWbD残念な人はわざわざこういう言葉使いたがる
0941デフォルトの名無しさん
2015/02/01(日) 10:05:09.75ID:Gotp+xwX0942デフォルトの名無しさん
2015/02/01(日) 10:32:17.89ID:Yfq6qaDG0943デフォルトの名無しさん
2015/02/01(日) 10:32:43.44ID:Yfq6qaDG0945デフォルトの名無しさん
2015/02/01(日) 19:08:05.83ID:Zdr4/0x60946デフォルトの名無しさん
2015/02/01(日) 20:15:27.83ID:XIt3wRQF0947デフォルトの名無しさん
2015/02/01(日) 21:15:31.51ID:Zdr4/0x60948デフォルトの名無しさん
2015/02/02(月) 23:01:39.16ID:Ky9zZXbIExcel2007なんだけど、モジュール内で普通に使えてるものがイミディエイトからだと
「AddressOf オペレーターの使い方が適切ではありません。」というメッセージが出ます。
foo(arg, AddressOf fun)
foo(arg, VBA.CLng(AddressOf fun) )
モジュール内で上が正しく動く状態で、イミディエイトではどちらもダメ。
0949デフォルトの名無しさん
2015/02/10(火) 03:33:53.67ID:XPNPmoVXイミディエイトで動かないのはAddressOfの仕様っぽい
インスタンスの関係かなと思ってブレークポイント設定してみたけどダメだったし
0950デフォルトの名無しさん
2015/02/10(火) 08:23:49.97ID:YAJNRvh1どうもありがとう
諦めることにします。
ぐぐってもなんの情報も出てこなかったし、これではまった人が誰もいないのかな?
0951デフォルトの名無しさん
2015/02/10(火) 21:36:15.70ID:lUQoznh3どうしても知りたいなら直前で変数に入れとけばいいしな
そもそもそんな状況になったことないけど
0952デフォルトの名無しさん
2015/02/12(木) 09:04:06.49ID:N08fUAK5イミディエイトをシェル的に使う
0953デフォルトの名無しさん
2015/03/04(水) 19:05:41.38ID:NvqfS5Cw0954デフォルトの名無しさん
2015/03/05(木) 04:09:24.11ID:vzxIr8j6メールの振り分けにだけ使ってる
標準の振り分け機能が貧弱で糞すぎるからな
家ではOutlook自体使ってないが、会社ではOutlookが指定なので仕方なく
定期的なメール送信とかは、OutlookではなくExcelのVBAからCDO.Messageを使ってる
特にExcelのファイルを添付してメールを送るようなものはね
0955デフォルトの名無しさん
2015/03/05(木) 23:29:19.30ID:6KN3KVMD使い方覚えるために自宅用に買おうとしても
もう怪しげな通販ぐらいしか売っているところがねーよ。
365契約すれば古いバージョンも入れられるのか?
0956デフォルトの名無しさん
2015/03/05(木) 23:51:42.89ID:QdpryhrY今なら2013だし、新しいのが出たらすぐに切り替わる
なんで今さら2010
とりあえずオクで売ってるのはバンドルの横流しだから認証は通るよ
ライセンス的にはアウトだけど
0957560
2015/03/06(金) 06:53:28.40ID:n9/U+gAr> なんで今さら2010
会社だと動作確認(特に Excel VBA)とかも必要だし、ホイホイ最新版にはできなかったりする
うちも標準は 2010 だし、半年前までは 2007 も新規インストールできた(一応 EA 契約してるから 2013 も使えるけど)
もののできとしては 2010 は結構最悪の部類なので、でかい会社ならダメ元で情シスとかに 2013 はダメなの? って聞いてみるのもいいかも
0958デフォルトの名無しさん
2015/03/07(土) 19:41:49.77ID:G+snOoOp0959デフォルトの名無しさん
2015/03/09(月) 23:48:59.02ID:7i5N+fBw例えば、
1:あいうえを
2:かきくけこ
3:さしすてそ
4:
とあって、4行目にたちつてとと入力するようなマクロを組みたい場合に
使えるようなマクロなのですが・・・
0960デフォルトの名無しさん
2015/03/10(火) 00:04:54.85ID:icAILILaCells(Rows.Count, "A").End(xlUp).Select
If Selection.Text <> "" Then Selection.Offset(1).Select
Selection = "たちつてと"
0961デフォルトの名無しさん
2015/03/14(土) 20:48:30.94ID:0ZBKvpV0([直前の動作と同じ]ではなくppAdvanceOnClickと同じ[クリック時]になってしまう)
どうすればいいんですかね?バグかもしれないけど
サンプル
Sub heart()
Dim exshape As Shape
With ActivePresentation.Slides(1).Shapes
Set exshape = .AddShape(Type:=msoShapeHeart, Left:=0, Top:=0, Width:=100, Height:=100)
End With
With exshape
.AnimationSettings.AdvanceMode = ppAdvanceModeMixed
.AnimationSettings.EntryEffect = ppEffectAppear
End With
End Sub
0962デフォルトの名無しさん
2015/04/14(火) 22:32:20.02ID:f56363a+0963デフォルトの名無しさん
2015/04/17(金) 04:02:11.31ID:9h0FsUevちなみに
特定のセルで 「='MT4'|BID!USDJPY」 を入力すると価格が変わるごとにセルのデータを更新してくれる。
VBAでfor文なんかを動かしていて、sleep(10)なんてすると、
sleepしてる間は価格を更新しなくなる。
これを解決する方法って、なんか無いですか?
0964デフォルトの名無しさん
2015/04/17(金) 07:36:44.43ID:0aoErropなんのために Sleepするの?
解決方法は目的による
0965デフォルトの名無しさん
2015/04/17(金) 17:35:28.56ID:9h0FsUev実際は10秒間隔で価格を順番にセルに代入したいんで、
sleep(10000)なんだけど。
たとえば、「A1」を ='MT4'|BID!USDJPY にしておいて価格を読み込ませておく。
�@ 「A5」に価格をコピー
↓ 10秒スリープ
�A 「A6」に価格をコピー
↓ 10秒スリープ
�B 「A7」に価格をコピー
ってな感じなんだけど、
�Aや�Bでコピーするときに、エクセル自体がルリープしてるんで
「A1」の値が止まったままでどうにもならない。
スリープ中でも「A1」の価格が変動するようには出来なかな?
0966デフォルトの名無しさん
2015/04/17(金) 18:10:32.72ID:0aoErropそれって厳密には10秒間隔じゃなくて、10秒の待ち時間+1セル分の処理時間になるよね
その程度のアバウトさでいいんならOnTimeのタイマーを使えばいいと思うよ
0967デフォルトの名無しさん
2015/04/20(月) 09:35:51.61ID:36si4ETdExcelスリープをやめればいい。
常に秒単位で現在時間を取得し続けて10秒たったらコピー動作をさせるとか。
MetaTraderからの取得が1秒ごとだったらVBAもそれにあわせて1秒スリープでもいいけど。
0968デフォルトの名無しさん
2015/04/20(月) 17:38:05.51ID:yEaTvXTzまず歩み値を取得して、
それから10秒足を作成するのはいかが?
そのほうが自由度高いんでない?
10秒足でも1分足でも日足も作れるよ?
0969デフォルトの名無しさん
2015/05/11(月) 21:16:02.65ID:AU+j6osaOutlookでVBAを使う余地はないのですか?
できることはできるみたいなのでなにか便利な使い方がありそうで活用したいのですが。
0970デフォルトの名無しさん
2015/05/12(火) 00:20:05.88ID:uUxoDge0ない
0971969
2015/05/12(火) 00:23:34.61ID:eRFd7464いやあるはずだ。
どなたか?
0972デフォルトの名無しさん
2015/05/12(火) 07:26:13.78ID:L1AhwHJgbccに自分のアドレスセットするようにしたり、重複受信したメールを削除したり、文章整形するマクロは作ったけど、配布が面倒なので結局C#で書き直した。。。
個人レベルで使うならいいけど、配布も考えているならやめた方がいいかなと思う
0973デフォルトの名無しさん
2015/05/12(火) 10:22:56.51ID:eRFd7464ありがとうございます。
C#で書き直すとは、いったいどうやって実行するのでしょうか?
わたくしはExcelのVBAしか使ったことがないので想像もできないです。
重複メール削除は便利そうですね。
でも同一メールと判断するのはどうやって判断するのでしょうか?
まさか本文のすべての文章や件名など、すべて1つ1つ比較してるのでしょうか?
0974デフォルトの名無しさん
2015/05/12(火) 12:26:39.00ID:LOHgl41G単にメールを送るだけならExcelからでもできちゃうし、大量のメアドの整理もワークシートの方がやりやすいし
Wordやパワポは一括してフォントや書式を変えたり整形するのに簡単なマクロを組んだりするけど
0975デフォルトの名無しさん
2015/05/12(火) 12:31:54.94ID:eRFd7464Wordのマクロで一括整形って、対象の文字や図形を選択するにはどうやってます?
これかなり困難だと思うけど。
0976デフォルトの名無しさん
2015/05/12(火) 12:32:19.96ID:eRFd7464どういうときにVBAが便利なんでしょうね?
0977デフォルトの名無しさん
2015/05/12(火) 19:52:46.96ID:IaNzBomB困ってる事がないならそれでいいじゃない
0978デフォルトの名無しさん
2015/05/12(火) 20:30:03.18ID:eRFd74640979デフォルトの名無しさん
2015/05/12(火) 22:01:24.72ID:m4bqcgSgプログラム作る時に便利です
0980デフォルトの名無しさん
2015/05/12(火) 22:07:06.68ID:IaNzBomB困ってる時じゃないと何にしても便利には感じないでしょ?
0981デフォルトの名無しさん
2015/05/12(火) 23:13:00.78ID:x0oiTbO7数値計算・統計処理・グラフ化するとか、
条件分岐が多い、複雑なSQL文を実行するとか
0982デフォルトの名無しさん
2015/05/12(火) 23:15:29.25ID:3umnJp/fいくつものクエリを実行してテーブル更新したり、消したり、新しく作ったりしてデータまとめてレポート発行したりするときにはすんごい便利。
でも困ってないならおすすめはしない。
0983デフォルトの名無しさん
2015/05/13(水) 05:27:33.38ID:RArUw9dY>どういうときにVBAが便利なんでしょうね?
手動でやるのが面倒・大変なときに便利
0984デフォルトの名無しさん
2015/05/13(水) 06:05:25.93ID:8tH6i27m0985デフォルトの名無しさん
2015/05/13(水) 11:30:55.76ID:+7++7ZCKそんなことをする機会があるのって
仕事で超巨大なデータベースをいろいろ扱っているからですか?
そんな環境に入りたいよ。そうすれば自然にいろいろ勉強できてスキルアップしそうで。
0986デフォルトの名無しさん
2015/05/13(水) 13:05:07.12ID:YtZjlbJT> 仕事で超巨大なデータベースをいろいろ扱っているからですか?
普通のプログラマーなら、Accessは使わないと思うよ。
Access使うのは、事務職な人たちが自分で何か作るか、ヘボいプログラマくらいかな(言い過ぎ)。
0987デフォルトの名無しさん
2015/05/13(水) 15:20:28.33ID:gs7+y/Fr0988デフォルトの名無しさん
2015/05/13(水) 15:40:35.48ID:YtZjlbJT0989デフォルトの名無しさん
2015/05/13(水) 18:06:32.69ID:lEc5ji9Lフロントエンドのツールとしては優秀
あとはPC1台で完結するシステムとかな
0990デフォルトの名無しさん
2015/05/13(水) 18:16:57.58ID:x5KIzAYS0991デフォルトの名無しさん
2015/05/13(水) 18:27:20.75ID:YtZjlbJT> 販売管理とか在庫管理とか、業務システムのフロントエンドとしてなら結構使われてる
バックエンド(というかデータストア)としてじゃなくて、フロントエンドにするのもあるのか。
そういうの、ほぼ絶滅じゃね?
0992デフォルトの名無しさん
2015/05/13(水) 18:32:09.29ID:YtZjlbJT今時こんなことやってる人、ご愁傷様・・・
0993デフォルトの名無しさん
2015/05/13(水) 20:14:17.51ID:Qka4MZoF小さな会社で昔やってました。
1台で完結する業務ならさくっと作れていいですね。
今でもプロトタイプを作るときには重宝しますが。
0994デフォルトの名無しさん
2015/05/13(水) 21:38:52.35ID:zizCvdvq0995デフォルトの名無しさん
2015/05/14(木) 01:44:32.59ID:22ahvIe/むしろ、バックエンドにAccess(Jet)使うとか恐ろしすぎるわ
0996デフォルトの名無しさん
2015/05/14(木) 05:23:05.36ID:RUWv38Yy0997デフォルトの名無しさん
2015/05/14(木) 06:31:21.57ID:3ox3NmoX0998デフォルトの名無しさん
2015/05/14(木) 06:34:08.01ID:0/Bl8/HLSQL Serverとネイティブ接続できるメリットはかなり大きかったね
0999デフォルトの名無しさん
2015/05/14(木) 18:11:58.18ID:paZl6i7s1000デフォルトの名無しさん
2015/05/14(木) 22:31:08.15ID:GCIxv95D10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。