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


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

VBAなんでも質問スレ Part2



1 名前:デフォルトの名無しさん [2015/05/21(木) 10:52:44.71 ID:KLv0vQmm.net]
VBAを使った質問ならなんでもござれ
本来の対象であるオフィスアプリを操作する以外の話もOK

ゲーム作り、Webアクセス、外部アプリの操作
COM(ActiveX)、Win32API、.NET Framework、DirectXなどなど
VBAで実行するものであればなんでも質問してください

VBAを開発環境としていろいろ作っちゃいましょう

前スレ

VBAなんでも質問スレ
peace.2ch.net/test/read.cgi/tech/1342087380/

関連スレ

Excel VBA 質問スレ Part36 [転載禁止]©2ch.net
peace.2ch.net/test/read.cgi/tech/1419718732/

Access VBA 質問スレ Part1
peace.2ch.net/test/read.cgi/tech/1328536426/

VBプログラマ質問スレ(Ver.6.0 まで) part64
peace.2ch.net/test/read.cgi/tech/1393069842/

Excel総合相談所 118 [転載禁止]©2ch.net
peace.2ch.net/test/read.cgi/bsoft/1430352555/

175 名前:デフォルトの名無しさん [2016/04/09(土) 15:25:31.33 ID:8VJ1WNjN.net]
>>167-170

DLLはこんな感じで
Declare PtrSafe Function funcABC Lib "ABC.dll" (ByVal n As Long, ByRef v As Variant) As Long

本来1が返ってくるべきところに0が返ってくるんです。
だけど、〜 Lib "C:\tmp\ABC.dll" 〜 とすると、ちゃんと1が返ってくる。

どちらの場合もDLL名を変えると「ファイルが見つかりません」という実行時エラーになるので、同じDLLファイルを
指しいてるのは間違いないと思います。

176 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 16:35:57.82 ID:kbPPFUQM.net]
>>172
そんなの "ABC.dll" の作り次第だろ
作者に聞けよ
dll のパス取得して何かしてるのかもしれないし
frog.raindrop.jp/knowledge/archives/000316.html

177 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 16:55:41.43 ID:DA1syyI4.net]
>念のため他のフォルダに同名のDllがないか確認しましたが、そんなものはありませんでした。
限りなくこれが怪しいと思うんだが

178 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 16:57:28.60 ID:XGWfr4Pw.net]
>>165
同名のdllが無いことをどうやって確認した?

179 名前:デフォルトの名無しさん [2016/04/09(土) 18:20:08.40 ID:uD9Ltjj7.net]
>>165
挙動が変わることはあります。
おわり

180 名前:デフォルトの名無しさん [2016/04/09(土) 18:32:34.00 ID:8VJ1WNjN.net]
>>175
パスが通っている全フォルダとカレントフォルダからの目視です。

環境変数(PATH)をまず確認して、
kernel32.dllにあるAPI 「GetEnvironmentVariableA」 に引数"PATH"を渡して出てきたフォルダを対象にしました。

問題のfuncABC も GetEnvironmentVariableA も同じVBAから発行しています。

181 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 18:41:03.58 ID:DA1syyI4.net]
カレントフォルダをどうやって確認したかとか
システムディレクトリにdllがないかとか

まあ、確認漏れ自体はいっぱいありそうだな

182 名前:デフォルトの名無しさん [2016/04/09(土) 18:46:44.36 ID:8VJ1WNjN.net]
>>178
C:\windowsやC:\Program Files、C:\Program Files (x86)は入ってますよ。
目視も検索フィルタにとりあえず *.dll で全DLLを出してからやっています。

>>176
マジですか...

183 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 19:45:00.69 ID:mXQNErhc.net]
>>179
本当にひとつしかないならあり得ない挙動だと思うけど。
dllの内容を明かしてみな。



184 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 19:57:07.07 ID:zSVIlalC.net]
Windows が使用する DLL 検索パス

1.実行中のプロセスの実行形式モジュールがあるフォルダー。
2.現在のフォルダー。
3.Windows システム フォルダー。このフォルダー

185 名前:へのパスは、GetSystemDirectory 関数が取得します。
4.Windows ディレクトリ。このフォルダーへのパスは、GetWindowsDirectory 関数が取得します。
5.環境変数 PATH 内に記述されたフォルダー。

https://msdn.microsoft.com/ja-jp/library/7d83bc18.aspx
[]
[ここ壊れてます]

186 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 20:29:56.83 ID:XGWfr4Pw.net]
>>177
ウインドウズの検索機能を使ってみたら?

187 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 20:38:17.27 ID:KOaWU5bX.net]
何か仕事でもしながら、ディスク全部の範囲で、検索すればいい

188 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 21:28:53.86 ID:yIzAT5uL.net]
windows なら黙って search everything 入れろ
考える余地なし

189 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 21:30:12.16 ID:yIzAT5uL.net]
あ、業務用のマシンだとマズいか

190 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 21:43:59.08 ID:YC7vrxdl.net]
>>179
> 目視も検索フィルタにとりあえず *.dll で全DLLを出してからやっています。
プログラマーに向いてないんじゃね?
コマンドプロンプトで
dir /s /b \ABC.dll
ってやればいいだけだろ

191 名前:デフォルトの名無しさん [2016/04/09(土) 23:15:48.61 ID:8VJ1WNjN.net]
>>180
ODBCのコネクションを張る関数で、特に自分の場所が関係する処理はしてないですね。

>>181-186
全ドライブを検索した結果(search everythingは入れてませんが dir/s はやってみた)
C:\Users\*****\Google ドライブ\
に見つかりました。
しかし、これを消しても現象は変わらなかった(もともと参照パスに入ってない)ので、諦めの気分です。

192 名前:デフォルトの名無しさん [2016/04/10(日) 00:12:20.49 ID:TaPFtU7E.net]
元々の質問は、挙動が変わることがあるか?で、
あるって回答で解決だと思うけど、どうしてもないってことにしたいの?
ゴールが見えないよ

193 名前:187 [2016/04/10(日) 00:39:39.00 ID:9vV3r8su.net]
>>188
あるって回答(>>176)もあり、ないって回答(>>180)もありで、判断がつかない状況です。



194 名前:187 [2016/04/10(日) 00:47:04.09 ID:9vV3r8su.net]
それと、>>173>>176もいまいち理解できておりません。
「dllのパスを取得」とは、実際の存在はひとつでもDeclare文での指定のしかたまでも検知できるんでしょうか?

195 名前:デフォルトの名無しさん mailto:sage [2016/04/10(日) 01:04:43.27 ID:9zYVMe1H.net]
まさか、パス・ユーザー名など、システムに関係する部分に、
日本語を使ってないだろうな?

それで、バグってるとか?

196 名前:187 mailto:sage [2016/04/10(日) 01:08:14.87 ID:9vV3r8su.net]
>>191
ないですね

197 名前:デフォルトの名無しさん mailto:sage [2016/04/10(日) 01:14:27.05 ID:9zYVMe1H.net]
そのDLLの作者が外人で、DLL内で、パス・ユーザー名を扱っていた場合、

もしその中に日本語が入っていれば、バグるかも

198 名前:デフォルトの名無しさん mailto:sage [2016/04/10(日) 01:22:30.64 ID:9zYVMe1H.net]
>>187
>ODBCのコネクションを張る関数で

それなら、そのDBのメーカーが(ドライバーが)、絶対パスしか許可していないのかも。
相対パスの危険性も考慮して、そういうアクセス許可にしているのかも

絶対パスを使えばいい

199 名前:デフォルトの名無しさん mailto:sage [2016/04/10(日) 05:47:22.16 ID:v52RcnsN.net]
>>187
> 特に自分の場所が関係する処理はしてないですね。
ん?
自分で作った dll なの?
だったら自分でデバッグしなよ

200 名前:デフォルトの名無しさん mailto:sage [2016/04/10(日) 10:59:47.17 ID:KR5BT3Be.net]
全ドライブを検査してひとつしかdllファイルがなかったって言ってるんだろ。
それが本当なら何も対処できないよ。OSレベルの不具合。

201 名前:デフォルトの名無しさん mailto:sage [2016/04/10(日) 17:49:12.01 ID:r0zhudqC.net]
VBAをコーディングするのに最適な画面サイズとモニターの台数は何台ですか?
縦と横どっちでつかってすか?
4Kディスプレイはどうですか?

202 名前:デフォルトの名無しさん mailto:sage [2016/04/10(日) 18:54:26.34 ID:oV0tVvW7.net]
(´・ω・`)

203 名前:デフォルトの名無しさん [2016/04/10(日) 19:33:25.31 ID:Y5yf6QHK.net]
>>197
3台

4Kいいよ



204 名前:デフォルトの名無しさん mailto:sage [2016/04/27(水) 21:49:20.13 ID:Wsz3hpAs.net]
エクセルのVBA質問があります。
一番前のTOTALシートのA22:H26までを複数シート(20シートくらいある)の最終行の次の行に貼り付けたいのです。
各シートの最終行はバラバラで多いのは数千とあります。
しかも、G列には\と$の通貨マークH列には金額が書いてあり、SUMIFが組んであります。
記録マクロでやると下記みたいになりますが、こんなこと可能なのでしょうか?
調べても出てこないので誰か教えてください。

Sub Macro2()
Rows("24:28").Select
Selection.Copy
Sheets("A").Select
Rows("22:22").Select
Selection.Insert Shift:=xlDown
Range("H22").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=SUMIF(R9C7:R19C7,RC[-1],R9C8:R19C8)"
Range("H23").Select
End Sub

205 名前:デフォルトの名無しさん [2016/04/28(木) 00:18:56.90 ID:Vq22azhO.net]
>>200
可能です

206 名前:デフォルトの名無しさん mailto:sage [2016/04/28(木) 07:31:01.70 ID:TNqjmghT.net]
>>201
教えてください。

207 名前:デフォルトの名無しさん [2016/04/28(木) 08:26:47.90 ID:RqXO/zBw.net]
>>202
具体的にあなたが躓いているところがわかりません

208 名前:デフォルトの名無しさん [2016/04/28(木) 12:27:24.37 ID:xB9gNSEq.net]
>>203
具体的にあなたが何がわからないのかわかりません

209 名前:デフォルトの名無しさん mailto:sage [2016/04/28(木) 12:29:10.17 ID:gq5pmM2C.net]
>>200
For Eachで全シートループして、各シート最終行取得して貼り付ければ良いと思いますが、ダメですか?

210 名前:デフォルトの名無しさん mailto:sage [2016/04/28(木) 20:07:58.00 ID:iqsXmWMg.net]
>>200ですが、出直してきます。

211 名前:デフォルトの名無しさん [2016/05/01(日) 15:15:56.13 ID:tKi6j9CT.net]
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています

言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?

Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al

ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw


The Covenant Project
概要

Covenantは、純粋P2Pのファイル共有ソフトです

目的

インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します

特徴

Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)

接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません


212 名前:デフォルトの名無しさん [2016/05/01(日) 23:24:37.04 ID:u17iQe5m.net]
EXCELのVBAでメール返信(OUTLOOK)をする仕組みを作りたいのですが、
元メールを引用するにはどうしたら良いでしょうか?
タイトルやらアドレスやら本文がくっついてないと、
どうも返信感がでないと思いまして。

213 名前:デフォルトの名無しさん mailto:sage [2016/05/03(火) 10:11:50.64 ID:YSERRocv.net]
>>208
Outlookヘルプから

次の例は、現在のフォルダを受信トレイに設定し、フォルダの 2 番目のメッセージを表示します。
Visual Basic for Applications
Set myOlApp = Outlook.Application
Set myNamespa



214 名前:ce = myOlApp.GetNamespace("MAPI")
Set myFolder = myNamespace.GetDefaultFolder(olFolderInbox)
myFolder.Display
Set myItem = myFolder.Items(2)
myItem.Display
[]
[ここ壊れてます]

215 名前:デフォルトの名無しさん [2016/06/04(土) 14:31:26.42 ID:ZLbjql14.net]
Excel向けだとVBA関連の本は結構あるのにOutlookのVBA本って
あんまり無いですね。
Outlookの仕分け機能では宛先とCCに○○から来た時に動作する
条件を付けられますが、宛先○○から来た時には動作するけど
CCに何か入っていた場合は動作しないマクロは作れないでしょうか。
環境はWin7、Outlook2010です。

216 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 17:57:25.97 ID:+2vTx5YA.net]
>>210
作れるよ

217 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 17:59:26.06 ID:+2vTx5YA.net]
outlook vba mail
とかでググれ

218 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 21:08:48.99 ID:xa1tVlDu.net]
>>210
多分こんな感じでできるかと

Public WithEvents InboxItems As Items
Private Sub Application_Startup()
Set InboxItems = Application.Session.GetDefaultFolder(olFolderInbox).Items
End Sub
Private Sub InboxItems_ItemAdd(ByVal Item As Object)
Dim mailItem As Outlook.mailItem
Set mailItem = Item
If InStr(mailItem.To, "○○") > 0 And mailItem.CC = "" Then
MsgBox "何かする"
End If
End Sub

219 名前:デフォルトの名無しさん [2016/06/12(日) 09:42:53.63 ID:D40PIOb3.net]
               【Win10】    こんな犯罪級OS薦めんなよwww   ↓   【スパイウェア】



この使用許諾契約書には書かれています

”最後にあなたのコンテンツを含む個人データ(例えばあなたの電子メールの内容や―プライベート通信やプライベートフォルダ内のファイル)にアクセスし―開示し保全します”

開示する ここ重要だよ

契約がなければ通常 高度な違法行為になりうることです それはあなたが自分の意思としてこの契約書に同意したのです
https://www.youtube.com/watch?v=ZBwEmgdqB1c



       【秘密保護法】  ナチスの手口でサヨクを捕まるんだろ? 早くやってみろよ m9(^Д^)  【緊急事態法】



スノーデン氏→国家秘密法は諜報機関NSAの日本での活動を容易にするために米国が設計して日本政府に導入を要求したもの。
全日本人が調査の対象であり、NSAはあなたの交際関係、信仰等の個人情報を把握している。
https://twitter.com/hopi_domingo/status/740193540529999873
今朝、辺野古で新基地建設に反対するママの会メンバーに対して、機動隊員が「お前たちには汚い血が流れている」などと暴言を吐いたそうです。
自分のやっていることを「だってお金欲しいもん〜」「俺の写真を待ち受けにしろ」とも (顔写真)
https://twitter.com/MothersNoWar/status/690357793702940672
サンマ以降のバラエティ芸人の大半が、暴走族出身で極右思想。原発反対派を「放射脳」と嘲笑する連中。
芸能界極右は石原慎太郎一家を筆頭に、上田晋也 草野仁 津川雅彦 向井理 松本人

220 名前:u 宇多田ヒカル マツコ 春日俊彰 田村淳 北村晴雄
https://twitter.com/tokaia mada/status/630627400552845312
[]
[ここ壊れてます]

221 名前:デフォルトの名無しさん [2016/06/14(火) 02:34:53.84 ID:2DTiTbF7.net]
vbaでshell関数を使って指定パスのエクスプローラをファイル選択状態で開いてるのですが、
家でやると何でもないのですが、会社でやると、その方法で立ち上げたエクスプローラは
1分〜数分以内に「エクスプローラは停止しました」となって落ちます。そのフォルダだけ
落ちるので他のは巻き込まれないだけマシですが、手動で立ち上げた他のエクスプローラで
このように不意に落ちた事はないので、プログラムから立ち上げたエクスプローラが特別
不安定だとしか思えないのですが、原因が不明です。
それで、家と会社の違いは、会社だと共有フォルダを開いている事です。
家ではテスト環境をローカルで構成している為か、全く問題は起きません。

色々ぐぐってみたのですが原因が不明です。
vbaから開く方法で、解決策、あるいは次善の方法等ありますでしょうか。

shell関数はこのように使っております。
Shell "Explorer.exe /select, """ & path & """", vbNormalFocus

環境はWindows7 Excel2010(32bit)です。

222 名前:デフォルトの名無しさん mailto:sage [2016/06/14(火) 06:56:55.57 ID:wwwgAdKU.net]
>>215
試しに自宅の環境で共有フォルダをshell関数でファイル選択状態で開いてみたけど
特に問題なかったよ

原因は共有フォルダであること
ではないのじゃないかな

その共有フォルダへのショートカットを作って
それをshell関数を使ってexplorerで開いてみるとかは?

223 名前:デフォルトの名無しさん mailto:sage [2016/06/14(火) 08:10:13.51 ID:BcKyLCvc.net]
手動で起動したプロセスは、親プロセスが無く、単独のプロセスだから、ずっと生き残るのかな?

Aプログラム(Aプロセス)から起動したプロセスは、親プロセスがAとなり、
Aを終了すると、その子プロセスもすべて、連鎖して終了するのかな?

プロセスを起動する際、親子関係を切れば?
ただしそうすると、起動されたプロセスは、A終了後も残り続けるから、
誰がそのプロセスを終了するのかが、問題となる

漏れは、Windowsはよく知らない。Linuxから推測して書いた



224 名前:デフォルトの名無しさん [2016/06/14(火) 08:45:39.28 ID:2DTiTbF7.net]
>>216
ショートカットから開く方法ですか、考えもしなかったです。
確実に再現するバグではない(場合によっては20分くらい経ってからクラッシュしますし、端末によっては何も起きなかったりします。)
なので、原因を掴むのが難しいです。

>>217
なるほど、プロセスが分離されているから巻き込まれなかったんですかね。

前後のコードを見返しているのですが、shell関数を読んだ直後に
Kill thisworkbook.fullName
thisworkbook.close
を読んで終了させているんですが、ひょっとしたらこの兼ね合いが原因かも?とふと思いました。
shell関数は非同期処理で、会社の共有フォルダを開くときはローカルと違って若干起動に時間がかかります。
shell関数の処理が完了しきっていないのに即終了させるから、動作が不安定になってる可能性はありますかね・・。

なのでとりあえずShell関数を、Wscript.ShellのRunメソッドの同期処理に置換えてみました。
それで明日会社でテストしてみます。

225 名前:デフォルトの名無しさん mailto:sage [2016/06/15(水) 20:38:23.92 ID:985LHqkd.net]
それVBAとか関係なく、普通にネットワーク上のフォルダを表示してるエクスプローラでも発生してるんじゃないのか?
https://support.microsoft.com/ja-jp/kb/972685#/ja-jp/kb/972685
https://support.microsoft.com/ja-jp/kb/2494427#/ja-jp/kb/2494427
とりあえず俺はこの二つで直ったが、エクスプローラ 落ちる とかでググってみ

226 名前:218 [2016/06/16(木) 07:48:37.40 ID:MO4h1nff.net]
>>219
同期処理に変えたら全く落ちなくなりました。
どうやら推測は当たったみたいです。

手動で立ちあげてる時には同じトラブルは一度も起こったこと無く、誰からも聞いていないので、
VBA処理が原因で間違いないと思います。

ぐぐっては見てたんですけど、VBA関連でのエラー報告は0でしたね。
しかし、元々この手のトラブル報告がかなり多いことにはびっくりしました。

とりあえずは解決です。皆さんどうも有難うございました。

227 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 14:05:29.72 ID:tOwQ8tvq.net]
タイミングの問題で、バグが起きるときは、

sleep 3秒などで、時間稼ぎすることが多いな

228 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 16:27:03.77 ID:YtVxucfB.net]
>>221
タイミングというか処理を待ち合わせる必要があるって事だよな
3秒で完了しない処理だと問題が起きる
90%くらい解決出来れば実用上は問題にならないかも知れないけど

229 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 21:40:45.67 ID:JOmdLZoV.net]
' キャッシュ反映を待って5秒待つ

↑これなんとかして

230 名前:デフォルトの名無しさん mailto:sage [2016/06/16(木) 21:53:33.23 ID:EpEOLr57.net]
>>223
何のキャッシュか判らないけど
キャッシュをフラッシュするインターフェイスがあればそれを使えば良いのでは
無いなら知らない

231 名前:デフォルトの名無しさん mailto:sage [2016/06/17(金) 01:16:02.29 ID:Sh+IdTol.net]
起動方法と起動のタイミングの問題で
>1分〜数分以内に「エクスプローラは停止しました」
>場合によっては20分くらい経ってからクラッシュ
のような症状が出るとは考えにくいけどな

まあ、直ったって言うならそれでいいけど

232 名前:樵の結び目。 [2016/09/03(土) 18:27:18.44 ID:Ms7vNg4j.net]
この作者について
img.atwikiimg.com/www9.atwiki.jp/gensouv/attach/346/23/ExcelVBAPractice.html
どう思いますか??
 

233 名前:デフォルトの名無しさん [2016/09/28(水) 19:27:48.59 ID:BVBInYIb.net]
vbaの And, Or って短絡評価してくれないの???



234 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 20:30:34.84 ID:X231kNmm.net]
>>227
普通しない
(常にしないかどうかは知らんけど)

235 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 22:20:25.14 ID:w7cfX4QA.net]
X(n) And Y(m) で X(n) = False だった場合、Y(m) は評価しなくても式が False と確定する
Or でも同様のことが可能

VBAがショートサーキットしているかどうかは、各関数で Debug ログを出力してみればわかる

236 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 04:55:17.68 ID:IF5lu7hc.net]
>>229
いちいち短絡評価の説明なんてしなくていいよ...

237 名前:227 mailto:sage [2016/09/29(木) 08:22:26.74 ID:l2tsRcXf.net]
くぅ。
短絡評価してくれるもんだと思って、
True, False, Nullを返す関数の結果で、
NullをFalseに倒したくて、
左辺でNot isNullやってたけど、
右辺もNullで動いてしまってエラーになってはまったわ。

238 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 12:46:05.66 ID:tIM+raH6.net]
VBAあるある

239 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 19:51:33.65 ID:prbbit7d.net]
.NetならOrElseやAndAlsoが使えるし
Nullable指定も出来るから便利なんだけどなー

まあ無いものねだりしても始まらないか

240 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 17:43:11.29 ID:fiaM9vLl.net]
VB(A)はWithとかある割にそういうとこは全然気が利かないよな
C言語すら知らない人が作った言語なんだろう事は判る

241 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 22:59:38.27 ID:315EhZFM.net]
VBって元々はMSじゃないんだよね BASIC好きのゲイツが惚れ込んで買収しただけ

242 名前:デフォルトの名無しさん mailto:sage [2016/10/27(木) 20:44:38.40 ID:LE0ob9Yw.net]
vbaの中、上級者向けの書籍を教えて

243 名前:ュださい []
[ここ壊れてます]



244 名前:デフォルトの名無しさん mailto:sage [2016/10/27(木) 21:44:23.99 ID:BIHhfe0H.net]
漠然と「VBAの初心者向けの本を教えてください」ってのはよくあるが、上級者向けは珍しいね
ある程度基礎が身に付き、やりたいことが分かってきていれば
○○に関する本、ってなるように思うんだが・・・

田中亨氏の「Excel VBA 逆引き辞典パーフェクト 」は名著だよ

245 名前:デフォルトの名無しさん mailto:sage [2016/10/28(金) 04:23:54.86 ID:s9odN72t.net]
>>237
ありがとうございます。
クラスや多段階配列、イベント自作、擬似コントロール配列あたりの情報がある書籍はありませんか?

246 名前:デフォルトの名無しさん mailto:sage [2016/10/28(金) 15:06:05.95 ID:Sg+Wt/Uz.net]
アプリ作成で学ぶExcel VBAプログラミングユーザーフォーム&コントロール(横山達大著)
かんたんプログラミング 応用編(大村あつし著)
同じく、かんたんプログラミング コントロール関数編

デバッグ関連だと
立山秀利著の本

247 名前:デフォルトの名無しさん mailto:sage [2016/10/29(土) 23:22:10.90 ID:b3lytwnZ.net]
VBAでコードを抜き出してSVNやgitで管理したりするとそれだけで上級者っぽくなる

248 名前:デフォルトの名無しさん [2016/10/30(日) 08:10:21.54 ID:R4QvvoTp.net]
それ以上にバカっぽいけどなw

249 名前:デフォルトの名無しさん mailto:sage [2016/10/30(日) 09:23:46.57 ID:2kQlDpFE.net]
今時差分管理もしてないのかよ

250 名前:デフォルトの名無しさん mailto:sage [2016/10/31(月) 23:59:17.10 ID:9abcSnRr.net]
VBACとか使ってんの?

251 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 12:06:59.89 ID:1XFRepCN.net]
PowerPointのVBAでファイルを閉じた後も変数の値が保存されるようにしたいんですが外部のテキストに書き出す以外にファイル本体にどうにかして埋め込む方法はありますか?

252 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 14:57:53.43 ID:atuXlQHb.net]
透明のシェイプとかに書くとか色々あるけど
実際本体ファイルを更新されるとバージョン管理とか使う側が気持ち悪がるとか運用面で問題が出そう

253 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 19:29:23.46 ID:4FxLnD3n.net]
Excel脳っすなぁ
標準的なユーザーデータ保存場所がちゃんとあるんだからそれ使えばいいじゃん



254 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 19:58:54.20 ID:KOZLaxG/.net]
>>246
どうすればいいでしょうか

255 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 21:21:37.88 ID:VJg+IRhi.net]
>>244
Presentation.CustomDocumentProperties
https://msdn.microsoft.com/ja-jp/library/office/ff744661.aspx

256 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 07:09:26.95 ID:HIDKMkau.net]
>>246
条件によるだろ
思いつきで即答すんなアホ

257 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 07:27:10.54 ID:ff698yUf.net]
>>249
条件って
ファイル本体に埋め込みたい
ってことだろ
>>246 の保存場所がどこの事を言ってるのかよくわからんが >>245 より >>248 の方がはるかにマシ

258 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 07:40:32.09 ID:xddq+MTq.net]
ファイル本体に埋め込みすんのがアホなんだよわかれよ素人
ゴミを量産して人に迷惑かけないでくれ
独りよがりの仕事してんじゃねえよ

259 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 08:07:27.12 ID:ff698yUf.net]
単なる基地害だったのか

260 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 20:25:02.30 ID:1dqSFjs6.net]
実際に仕事してるとそれこそ基地外避けを作る必要が出てきたりするんだよな

261 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 21:24:47.40 ID:lpX4EXgF.net]
ユーザーデータを変な場所に保存したりするやつとか避けないとな

262 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 22:43:16.46 ID:diTiDCUQ.net]
>>254
> 変な場所に
透明のシェイプとかのことですね、わかります

263 名前:デフォルトの名無しさん mailto:sage [2017/02/13(月) 17:14:33.92 ID:QPcPOced.net]
50枚のスライドが入ったパワポが5個あります。
これを統合したいのですが
ファイル1の1枚目
ファイル2の1枚目
ファイル3の1枚目
ファイル4の1枚目
ファイル5の1枚目
ファイル1の2枚目。。。

という順番にしたいのです。
どういうマクロを書けばいいでしょうか?



264 名前:デフォルトの名無しさん mailto:sage [2017/02/13(月) 21:36:30.61 ID:MAF656mM.net]
>>256
その通りのマクロを書けばいいのでは?

265 名前:デフォルトの名無しさん mailto:sage [2017/02/13(月) 21:54:55.31 ID:1gaAmlEB.net]
新規で作ったらコピペを繰り返すだけ

266 名前:デフォルトの名無しさん mailto:sage [2017/02/14(火) 00:38:49.96 ID:hvVJhpIb.net]
パワポってマクロ使えるんだ
そらそうだわな

267 名前:デフォルトの名無しさん [2017/02/14(火) 01:58:27.90 ID:ahDpDw9M.net]
ExcelVBAをつかいこなしていても
パワポはマクロの記録がないと腰が重いな

268 名前:デフォルトの名無しさん mailto:sage [2017/02/15(水) 08:18:34.60 ID:uIQboeV9.net]
>>256
この作業用を何回も繰り返さないといけないの?
1度きりならあなたの場合は手作業の方が早い気が

269 名前:デフォルトの名無しさん mailto:sage [2017/02/15(水) 13:14:12.73 ID:zgJtAmDR.net]
>>256
スマホからだから試してないけどこんな感じかな
Application.Presentations.Open(ひとつ目のファイル)
Application.Presentations.Open(ふたつ目のファイル)
...
Application.Presentations.Open(いつつ目のファイル)
Set P = Application.Presentations.Add
For I = 1 To 50
For J = 1 To 5
Application.Presentations.Item(J).Slides(I).Copy
P.Slides.Paste
Next
Next
P.SaveAs(新規のファイル)

270 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 13:32:21.69 ID:xPy6pfR0.net]
選択されているセル範囲内の文字、図形を削除する手順を作ってみましたが、処理がえらく重いです。
もっと処理を早くする方法はないでしょうか?
Sub sakujo()
Application.ScreenUpdating = False   '画面更新を停止
Dim shp As Shape
Dim rng As Range
If TypeName(Selection) <> "Range" Then Exit Sub
For Each shp In ActiveSheet.Shapes
Selection.ClearContents
Set rng = Range(shp.TopLeftCell, shp.BottomRightCell)  '図形の配置されているセル範囲をオブジェクト変数にセット
If Not (Intersect(rng, Selection) Is Nothing) Then  '図形の配置されている範囲と選択されているセル範囲が重なっているときに図形を削除
shp.Delete
End If
Next
Application.ScreenUpdating = True  '画面更新を再開
End Sub

271 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 14:40:32.47 ID:bekNjoMq.net]
>>263
再計算とイベントも停止してみた?
あと、コレクションに対するループの中で自分自身のコレクションが変化するのは、なんとなくまずい気がする
根拠はないけど、それって遅くなる要因と違う?

272 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 15:02:34.32 ID:Q2T7iSLN.net]
処理の基本をよく考えるべき。
1.Shape毎にSelection.ClearContentsする意味は?
2.shp.Delete後もループする意味は?
3.そもそもSelectionって何?つまり何が選択されている時に削除したいの?

For Each shp In ActiveSheet.Shapes
If shp Is Selection Then
shp.Delete
Exit For
End If
Next

じゃ駄目?

273 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 15:08:21.72 ID:Q2T7iSLN.net]
選択されているセル範囲については最初のIf文でExit Subしてるから削除されないんじゃ?
処理がよく分からん。

選択されているShapeの下のRangeの内容を削除したいならshp=Selectionの場合に
Range(shp.TopLeftCell,shp.BottomRightCell).ClearContents
で良いんじゃ?



274 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 15:10:34.31 ID:Q2T7iSLN.net]
shp=Selectionの場合じゃなくてshp Is Selectionの場合だな。
shp.Deleteの前ね。

275 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 15:24:01.29 ID:5OVH7aZj.net]
>>265
質問者じゃないけど変わって説明するよ
・シート上に文字と図形が複数箇所に設定されている
・消す範囲を選択して、その範囲内の文字と図形を消すコードを書いた
・でもなぜか遅い

質問者に言えるのは、
・Selection.ClearContentsはfor eachの外でいい
・試しに100個のshapeを貼り付けて50個くらいが入る範囲を選択して消してみたら一瞬で終了(もちろんコードでだよ)
・遅いって具体的にどれくらいなの?

276 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 16:00:14.32 ID:Q2T7iSLN.net]
>>268
コード見りゃわかる。
でもコードがやってることは無駄な部分が多いから聞いてる。

最初のIf文を見ればRangeを選択した場合はExit Subしたいみたいだがら範囲選択した場合は処理して欲しく無いんだよな。
→じゃ、どんな時に処理して欲しいの?

For Each shp In ActiveSheet.Shapes
If shp Is Selection Then
Range(shp.TopLeftCell,shp.BottomRightCell).ClearContents
shp.Delete
Exit For
End If
Next

じゃ駄目なの?

277 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 16:07:14.86 ID:xPy6pfR0.net]
今までは長い時で1〜1.5秒程止まっていました
>>268さんの言われた通り、Selection.ClearContentsの位置を変えたらスムーズになりましたのでこれで行こうと思います
たくさんご意見頂きありがとうございました

278 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 16:14:41.52 ID:5OVH7aZj.net]
>>269
> If TypeName(Selection) <> "Range" Then Exit Sub
だよ

279 名前:デフォルトの名無しさん mailto:sage [2017/02/26(日) 14:44:16.79 ID:nMuhJunv.net]
エクセルのマクロでも質問大丈夫でしょうか?
名前と同じファイル名の画像を名前セルの隣に貼り付けるプログラムなんですが
Sub ボタン1_Click()
Const n As Long = 2
Dim i As Long
Dim x As Double
Dim s As String
Dim t As FileDialog
Dim m As VbMsgBoxResult
With ActiveSheet
For i = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row Step 6
Set r = .Cells(i, 3).MergeArea
s = "D:\画像\1\" & .Cells(i, 2).Value & ".jpg"
Dir Application.Path
With .Pictures.Insert(s).ShapeRange
.LockAspectRatio = msoTrue
x = Application.Min(r.Width / .Width, (r.Height - n) / .Height)
.Width = .Width * x
.Left = r.Left + (r.Width - .Width) / 2
.Top = r.Top + (r.Height - .Height) / 2
End With
Next
End With
End Sub
この"D:\画像\1\"の部分をフォルダ選択できるようにしたいので
Dim s As String
  Dim t As FileDialog
Set t = Application.FileDialog(msoFileDialogFolderPicker)
s = "t" & .Cells(i, 2).Value & ".jpg"
としたら「1004 PicturesクラスのInsertプロパティを取得できません。」と実行できません
どうしたら"D:\画像\1\"の部分をフォルダ選択できるようにできるのでしょうか?ご教示お願い致します。

280 名前:デフォルトの名無しさん mailto:sage [2017/02/26(日) 16:00:22.84 ID:nt1S72uw.net]
>>272
Dim s As String
Dim t As String
With Application.FileDialog(msoFileDialogFolderPicker)
  If .Show = False Then Exit Sub
  t = .SelectedItems(1) & "\"
End With
'途中省略
s = t & .Cells(i, 2).Value & ".jpg"

じゃないかな?
あと
元コードもそうだけど
フォルダ内に その画像ファイルが存在してなかった時の対策も必要だと思うよ
同じエラーになるぞ それとも絶対 あるのが 確定してる?

281 名前:デフォルトの名無しさん mailto:sage [2017/02/26(日) 16:45:49.33 ID:nMuhJunv.net]
>>273
大変ありがとうございます!
ただ、貼り付ける画像は複数あり、貼り付けるたびにフォルダ選択画面が出てしまいますので、一気に貼り付けられないものでしょうか?
ファイルが存在してない時の対策は、セルの状態を色変えて罫線で斜線を挿入したいと考えてますが、まだそこまで進む前段階がクリアできないので困ってます
よろしくお願いします

282 名前:デフォルトの名無しさん mailto:sage [2017/02/26(日) 16:51:45.39 ID:nt1S72uw.net]
>>274
ん? そこは分ってるとおもたよ
フォルダ選択部分は Forループの外だよ
↓ここねw
With Application.FileDialog(msoFileDialogFolderPicker)
 If .Show = False Then Exit Sub
 t = .SelectedItems(1) & "\"
End With

283 名前:デフォルトの名無しさん mailto:sage [2017/02/26(日) 16:57:59.74 ID:nMuhJunv.net]
>>275
あっ!できました!ありがとうございます!助かりました!



284 名前:デフォルトの名無しさん [2017/03/06(月) 23:29:36.96 ID:QCgyLcj6.net]
こんにちは。

パワーポイント2013のVBAについて分かる方教えて下さい。

やりたいことは、グラデーションの塗りつぶしがあるシェイプのGradientStopsのそれぞれの色を変化させるアニメーションの方法です。

2013ではできないけど2016ではできる等の情報もあればお願い致します。

285 名前:デフォルトの名無しさん mailto:sage [2017/03/08(水) 21:50:45.20 ID:DO0ivfK5.net]
vbaだけでhttpサーバーって出来る?

286 名前:デフォルトの名無しさん mailto:sage [2017/03/08(水) 23:04:04.36 ID:Tpob7EG8.net]
俺が手を下すまでもないな
答えてやれよ
>>280

287 名前:デフォルトの名無しさん mailto:sage [2017/03/09(木) 01:39:01.40 ID:UFk6xx1O.net]
VBAだけってのが
外部コントロール使用禁止
API呼び出し禁止
なら不可能です

288 名前:デフォルトの名無しさん mailto:sage [2017/04/09(日) 15:56:17.26 ID:9WwYB+FH.net]
VBAの変数の値を次回の処理を行う時まで記録しておくのにセルに書き込みをしたりしていますが、

セルにアクセスするのを減らすためにセルに記録しなくて処理終了時に変数値をVBA内で保存しておいてくれる一次記憶領域みたいな物はないのでしょうか?

289 名前:デフォルトの名無しさん mailto:sage [2017/04/09(日) 16:02:56.39 ID:9WwYB+FH.net]
ちりも積もればの話ですが
足し算引き算割り算レベルの計算をセルに関数を割り当てて行うのと
同じ計算式を変数を用いてVBAで書いて実行するのとで、より処理速度が速いのはどちらでしょうか?

290 名前:デフォルトの名無しさん mailto:sage [2017/04/09(日) 16:09:57.30 ID:Lq/WJuQk.net]
>>281
セルでいいんじゃないの?
ただそのIOは配列アクセスを使うべき
ループで1セルづつ読み込むとかがナンセンス

291 名前:デフォルトの名無しさん mailto:sage [2017/04/09(日) 16:14:42.36 ID:K8MFArI9.net]
>>281
説明がいまいち分かりにくい。
次回ってのは何時のことを言ってる?
グローバルな変数じゃダメなの?
次にそのブックを開くまで保持したいならセルってのも分かるんだが。
で、その場合にセルの代わりに保持したいならCustomDocumetProperties使ったりするかな。

292 名前:デフォルトの名無しさん mailto:sage [2017/04/09(日) 16:27:32.06 ID:9WwYB+FH.net]
>>283
ありがとうございます。
>配列アクセス
勉強してみます。

>>284
Bookを閉じずに他からデーターを取り込み再度VBA実行を繰り返します。
>グローバル変数
>CustomDocumetProperties
勉強してみます。

グローバル変数に代入した数値は処理を中断しても生き続けるのであればそれで解決しそうです。

293 名前:デフォルトの名無しさん mailto:sage [2017/04/09(日) 16:44:07.10 ID:9WwYB+FH.net]
>>284
プロシージャの上に定義すると処理が終了しても最終定義された内容は残ったままなんですね!
今まで処理を中断する必要がある場合は変数をすべてセルに書き出していましたが大発見です。ありがとうございました。



294 名前:デフォルトの名無しさん mailto:sage [2017/04/09(日) 19:39:59.08 ID:9WwYB+FH.net]
Public変数もしくは通常の変数の指定数の限界はあるのでしょうか?
問題なく動くレベルは何個ぐらいでしょうか?

50個
100個
1000個
10000個でも平気だっり?
実は
100000個以上でも問題ないとか?

295 名前:デフォルトの名無しさん mailto:sage [2017/04/09(日) 19:51:50.86 ID:0T9WQSVM.net]
>>287
使えるメモリは決まってる
変数の個数じゃなくてそれぞれのバイト数の合計

296 名前:デフォルトの名無しさん mailto:sage [2017/04/09(日) 23:55:43.90 ID:K8MFArI9.net]
>>287
グローバル変数(Public)は便利に見えるけどスコープを考えて必要無い所では使わない方が良い。
PublicかPrivateかプロシージャ内で宣言するかを意識して使った方が良いね。

297 名前:デフォルトの名無しさん mailto:sage [2017/04/10(月) 02:47:06.39 ID:AhmZ51rM.net]
日曜の午後からずっとVBAを書いてるけどまだおわらね〜
てかやればやるほど選択肢が爆発的に増えてきて一生かかってもおわりそうにね〜!w

298 名前:デフォルトの名無しさん mailto:sage [2017/04/10(月) 04:05:13.85 ID:sRLMXvmn.net]
>>287
しかもEndやErrorで抜けたら破棄されるという罠

299 名前:デフォルトの名無しさん mailto:sage [2017/04/11(火) 00:40:18.97 ID:egN7ZnVO.net]
素数や組み合わせ爆発のような数学の迷宮的な問題に陥って
一生かかってもコードを完成させるのは無理ですよみたいな場合もあるのでしょうか?

300 名前:デフォルトの名無しさん mailto:sage [2017/04/11(火) 10:41:22.79 ID:Ei1BFwyD.net]
>>292
数学的バックグラウンドがなければコードが書けないという類いの問題はあるね。
たとえばNP困

301 名前:難なやつ。
巡回セールスマンとかナップサック問題とか、ナーススケジューリング問題とか。
自力でなければ、それなりの回答が得られる解法(コード)が既に存在してるものもある。
[]
[ここ壊れてます]

302 名前:デフォルトの名無しさん mailto:sage [2017/04/11(火) 11:01:45.96 ID:o/k96Ri6.net]
問題を解く方法を考案するのと、その方法をコンピューター言語に翻訳する作業は別ですわ
それぞれに異なった知識と才能が必要となりますので

303 名前:デフォルトの名無しさん mailto:sage [2017/04/11(火) 11:03:15.94 ID:6dnWkPrh.net]
>>291
End Subの行にブレークポイント、これ



304 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 22:41:46.94 ID:iuenojzm.net]
パブリック変数で

1000個
10000個でも平気だっり?

とかどんな拷問なんだよw

305 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 23:26:11.80 ID:92wBssf5.net]
テストしてみたがパブリック変数500個は問題なく動いた。
もっと使ってる人いる?

306 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 19:40:41.67 ID:TpPjDerb.net]
いらない

307 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:22:06.10 ID:BWuBR5xw.net]
変数の一部を変数にする事は出来ないのでしょうか?(代入
とかではなく)
たとえば↓はイメージですが変数名の箇所を文字列をつなぎ合わせる時と
同じように変数をわりあてられないのでしょうか?(以下は動きませんがphpではこれができます。)
dim aaa1
dim aaa
dim no
dim bbb

aaa1=例文1
aaa=aaa
no=1

aaa & no = bbb

msgbox bbb

結果は「例文1」 と表示されますみたな、、 

308 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:28:31.62 ID:BWuBR5xw.net]
>>299
最終的には
aaa1=「例文1」
aaa2=「例文2」
aaa3=「例文3」


とし
aaa & no のno番号だけ差し替えて制御するみないな感じで使います。
ただしnoの番号は連続した数字ではなく他の集計結果からランダムに発生するため
ループ処理等では成り立たず変数のように扱う必要があります。

309 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 22:10:11.53 ID:9tskJEPF.net]
>>300
aaa1とかaaa2を変数として捉えず、文字列と数値を要素に持つ2次元配列と見れば良い
で、データ全体を制御するときは、aaa1,aaa2...の2次元配列全てを要素として持つコレクションオブジェクトを生成して操作する

310 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 22:18:30.36 ID:TpPjDerb.net]
>>300
Dictionaryのkeyにすれば良いんじゃね

311 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 22:25:23.50 ID:9tskJEPF.net]
CollectionよりDictionaryだな、確かに

312 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 23:24:44.93 ID:3F+Ljh12.net]
そういう質問、初心者によく聞かれるわ
普通は配列を使えと教えるもんだが

313 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 06:16:50.97 ID:zUhE/Mll.net]
>>302
>>301
ありがとうございます。Collection Dictionary 調べてみましたが
どちらも説明をざっと読んでも使い方が理解できませんでしたが挑戦してみます。

phpのように (aaa & no) =
と変数名自体を複数の変数で合成する事は出来ないのですね。



314 名前:299 mailto:sage [2017/04/22(土) 08:27:20.54 ID:zUhE/Mll.net]
>>300
>>301
>>302
>>304

aaa1=「状況に応じて変化する数値1」
aaa2=「状況に応じて変化する数値2」
aaa3=「状況に応じて変化する数値3」


すみません説明を単純にするために「例文1」としてましたが
変数に格納されるのは状況に応じて変化する数値(他の集計の計算結果)でした。
固定された文言であればDictionary keyで処理できるというのはわかりましたが
格納されている物が変化する数値の場合かつ
変数名を数字で管理(他の集計から3という結果が出たら→aaa3が適応されるみたいな)
したい場合こういうことを実現する方法はありますでしょうか?

315 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 08:53:12.92 ID:MM2jcjjz.net]
>>306
変数名を数字だけで管理する方法はない。
VBAの仕様上、できない。

というか、その集計結果なるものがプログラム実行時に決定するのだとしたら、集計結果を格納する変数の名前に集計結果の数値をはじめから盛り込もうとするのは無理があるし、そもそも理由が分からない。
やりたいことを実現するにはもっと適切な他の方法があるんじゃないかな。

316 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 11:27:30.44 ID:6RXuRSFv.net]
>>306
Dictionaryのvalueは変更可能

317 名前:299 mailto:sage [2017/04/22(土) 15:29:06.19 ID:zUhE/Mll.net]
>>308
>>307
理解するのにかなり時間がかかりましたがDictionaryなんとなくわかりました。
これって Dim とかPublicとかの変数とは別に存在できるんですね。
全く未知の分野ですが使ってみます。ありがとうございました。

318 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 20:43:48.30 ID:zUhE/Mll.net]
Dim dic As New Dictionary
Dim i As Integer

dic.Add "キー1", "アイテム1"
dic.Add "キー2", "アイテム2"
dic.Add "キー3", "アイテム3"

Dictionaryで指定した"キー"と "アイテム"は処理が終了するとリセットされるようですが、
グローバル変数のように処理が終了しても次実行されるまで記憶させておくようにする事は出来ないのでしょうか?

319 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 22:48:51.75 ID:AOzJBbd9.net]
>>310
プロシージャを跨いで値を保持させるなら、グローバルな配列変数、(アプリケーションがExcelならば)セル、シェイプ、カスタムドキュメントプロパティ、グローバルコレクション、自作のグローバルクラスのインスタンスなどに値を記憶させるしかない

でもそれならわざわざプロシージャ内でDictionaryを使って連想配列を操作するより、ExcelのセルにKeyと値を書き込んで配列アクセスして読み書きする処理の方が遥かに楽だと思う

320 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 23:30:15.48 ID:zUhE/Mll.net]
>>311
ありがとうございます。
今作っているコードでセルへのアクセスが膨大になってきて処理時間がどんどん長くなる傾向がみられまして
全操作をセルにアクセスせずに完結させようと色々考えていましたがなかなかそうはいかないようですね。

321 名前:デフォルトの名無しさん mailto:sage [2017/04/23(日) 05:30:19.61 ID:t5ve42Di.net]
>>312
Dim dic As New Dictionary
の宣言を何処でしているかによるんじゃね?

322 名前:デフォルトの名無しさん mailto:sage [2017/04/23(日) 10:16:09.39 ID:wfwXXeKO.net]
>>312
標準モジュールとかでDictionary型のオブジェクト変数をグローバルスコープ(Public)でNew宣言すれば、処理を抜けてもDictionaryのItemは初期化されないんじゃないのかな
ただ単なる配列の処理でデータが数千件程度なら、描画止めた状態でワークシート使った方が遥かに楽だと思うが。

323 名前:デフォルトの名無しさん mailto:sage [2017/04/23(日) 16:51:51.75 ID:fs201BJ1.net]
>>311
引数に渡すってのを忘れてるぞ。
一番使われてるんじゃないか?



324 名前:デフォルトの名無しさん mailto:sage [2017/04/23(日) 17:11:32.92 ID:yvJyPXpi.net]
>>315
何の引数に渡すことを指してるのかな?

325 名前:デフォルトの名無しさん mailto:sage [2017/04/23(日) 18:02:04.26 ID:fs201BJ1.net]
>>316
プロシージャを跨ぐって話だろ。
別のプロシ−ジャに引数として渡せば形の上ではそれぞれのローカル変数でも値は保持されるだろ。

326 名前:デフォルトの名無しさん mailto:sage [2017/04/23(日) 18:27:09.16 ID:yvJyPXpi.net]
>>317
>>310を読んでなんとなく、一個のルーチンのプロシージャ間の値の受け渡しの話ではなく、ルーチン内で一度AddしたDictionaryのKeyとItemを何らかの形で保存して、同じルーチンを再実行したときにKeyとItemを再利用することが出来るかどうかという話だと思ったんだが

まぁ、オブジェクトプロパティへの値の保存も実際はそのオブジェクトを定義してるクラスのメソッドに引数を渡してるのと同じだから、変わらないといえば変わらないけど

327 名前:デフォルトの名無しさん mailto:sage [2017/04/28(金) 17:33:41.10 ID:krqKI6DB.net]
超既出FAQですな。

『Public 宣言された変数の有効期間』
https://support.microsoft.com/ja-jp/help/408871

簡単に言うと、メソッド実行中以外はいつでもpublic変数はクリアされうるから、値が残っていることを期待したマクロを書くなってこと。

328 名前:デフォルトの名無しさん mailto:sage [2017/04/28(金) 19:14:11.69 ID:AZu ]
[ここ壊れてます]

329 名前:qyiJa.net mailto: >>319
俺は使う時にクリアされてるかチェックしてクリアされてたら再設定するようにしてるな。
値が0だったら値を取得するFunctionを呼び出すって感じ。
[]
[ここ壊れてます]

330 名前:デフォルトの名無しさん mailto:sage [2017/04/28(金) 22:13:43.74 ID:A3VkBONm.net]
Publicな静的変数は使わない。
エクセルのセルとかワードの文書変数とかの規定オブジェクトにデータを書き込んだ方が便利

331 名前:デフォルトの名無しさん mailto:sage [2017/04/29(土) 02:16:02.91 ID:2iGvQ1xG.net]
>>321
いや、それは格好悪いんじゃね?
セルを使ったりCustomDocumentPropertiesも使うけど、それに合ったものだから使うわけでPublic変数に合ったものもある。
適材適所だろ。

332 名前:デフォルトの名無しさん mailto:sage [2017/05/25(木) 20:51:55.45 ID:yS9f0RVc.net]
ontime で実行するプロシージャって標準モジュールに書かないとあかんのか。
このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。って出た。

333 名前:デフォルトの名無しさん mailto:sage [2017/05/25(木) 21:07:30.77 ID:JTnnq+Q0.net]
>>323
スコープ
普通にCallで呼び出せる場所にないと実行できないのは、どの方法でも同じ



334 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 00:03:34.69 ID:Fw61rXsb.net]
>>324
ThisWorkBookのモジュールからOnTimeでThisWorkBookのモジュール内のPrivate Sub を予約したんですが・・・これじゃ駄目なんですかね?

335 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 23:19:52.51 ID:Fw61rXsb.net]
>>325です
OnTimeで実行予約するプロシージャを標準モジュールに移動したら動くようになりました〜

336 名前:デフォルトの名無しさん [2017/06/05(月) 21:02:56.92 ID:bd1ggU41.net]
特定の文字が含まれているセル(複数ある)を検索し、

検索されたセルを含む行全体(Entirerow)を同時選択する方法

以上お願いします。

337 名前:デフォルトの名無しさん [2017/06/05(月) 21:06:49.56 ID:bd1ggU41.net]
その文字を含むセルを、行ごと削除したり、行ごとコピーしたりと、いろいろしたいので質問致しました。

338 名前:デフォルトの名無しさん mailto:sage [2017/06/05(月) 21:25:48.60 ID:nSGQpg3a.net]
鮮やかな丸投げっぷりにワラタ
作成依頼OKな Excel VBAスレと間違えてない?

339 名前:デフォルトの名無しさん mailto:sage [2017/06/05(月) 21:31:47.51 ID:tRFV5HQ5.net]
>>328
とりあえず、複数行を選択するところをマクロの記録で見てみたら?
ctrlキー押しながら選択するのとshiftキーを押しながらのとで。

340 名前:デフォルトの名無しさん mailto:sage [2017/06/05(月) 21:41:12.12 ID:jKyX/qwq.net]
検索対象のセル範囲でForループを回す
セル値に特定文字を含むセルが見つかる度にEntireRowを取得して変数に入れるかUnionで選択対象の範囲をマージしていく
ループ終了後にSelectする
以上

341 名前:デフォルトの名無しさん [2017/06/05(月) 21:45:35.27 ID:epzJZZwH.net]
>>327
Ctrl+Fで検索しろやボケナス
ちゃんと行選択までしてくれるぜ

342 名前:デフォルトの名無しさん [2017/06/05(月) 22:37:03.17 ID:bd1ggU41.net]
ごめんなさい、質問者です。
ここじゃなかったのですね。上に上がったやり方でできそうなのでやってみます。ありがとうございます

343 名前:デフォルトの名無しさん mailto:sage [2017/06/06(火) 05:49:03.11 ID:tznXutzN.net]
色々細かい条件でどんなコードが効率いいか、変わってくるでしょ。

例えばそのセルがあるのは、特定の行だけとか、検索文字列はセルに完全一致なのか含まれるのか、など。



344 名前:デフォルトの名無しさん mailto:sage [2017/06/06(火) 09:11:47.41 ID:YhE+Nuz8.net]
331だが、同じ行に該当セルが複数ある場合は無駄が生じるな
実現したい機能次第だが、工夫が必要かもな

345 名前:デフォルトの名無しさん [2017/06/07(水) 19:31:10.77 ID:e13xfCG0.net]
はじめまして。以下2点、教えていただけると幸いです。
環境は、OS:Windows7, Excel2010です。よろしくお願いします。

1.プルダウンの初期値設定
セルA1にりんご、A2にバナナ、・・・のようにA列にある項目をプルダウンで選択したいです。
このとき、「A列のj行目(パラメータ選択可能)を初期値にしたプルダウンをB1に設置する」VBAのコマンドを教えていただきたいです。

2.ファイル名の変更
aaa.txtというファイルをデスクトップに出力するマクロを作れました。
このマクロ実行後、再度実行するとaaa(2).txtのファイルを、再度実行するとaaa(3).txtのファイルを出力・・・
このようなVBAのコマンドを教えていただきたいです。

346 名前:デフォルトの名無しさん mailto:sage [2017/06/07(水) 21:49:32.12 ID:nqbSOdK9.net]
>>336
コマンドはありません

347 名前:デフォルトの名無しさん mailto:sage [2017/06/07(水) 22:23:27.64 ID:L3ua+fDn.net]
>>336
txtファイルをデスクトップに出力っていう日本語の破壊力がやべぇ

348 名前:デフォルトの名無しさん mailto:sage [2017/06/08(木) 05:33:24.44 ID:1DKX/Vru.net]
>>336
1
・B1セルを選択してからマクロの記録を実行
・入力規則でリストを選択にリストの内容でA列を選択する
・マクロ記録の終了をする
・できたコードを修正してA列の任意のセルをデフォルトにするように変更する

2
・デスクトップにaaa.txtが存在するかチェックする。
・存在しない場合はaaa.txtを作成して終了。
・存在する場合はDo~Loop中にデスクトップにaaa(i).txtが存在するかチェックする
・存在する場合はiをカウントアップして次のループ
・存在しない場合はそのiを使用してaaa(i).txtを作成して終了。

349 名前:デフォルトの名無しさん mailto:sage [2017/06/25(日) 17:10:56.20 ID:/fEFwdln.net]
A1セルに =NOW()-TODAY() と入力すると
現在時刻が表示されますが。

MsgBox Range("a1")
とすると 0.0110212・・・と言ったような数値が出ます。

Dim now As Date 
now=Range("a1")
と型を指定した変数に格納してやると 
MsgBox now で 21:49:32 といった一般的な時間表記を示せますが、

変数化を省略して
MsgBox Range("a1")〜に補足コードを書くなどで同じ処理を実現する方法は無いのでしょうか?

350 名前:デフォルトの名無しさん mailto:sage [2017/06/25(日) 17:20:36.10 ID:A4A49pvi.net]
MsgBox Range("A1").Text
とか
MsgBox Format(Range("A1"), "hh:mm:ss")
とか

351 名前:デフォルトの名無しさん mailto:sage [2017/06/25(日) 17:26:03.97 ID:/fEFwdln.net]
>>341
なんと!!
変数をだらだら定義すること無く綺麗さっぱり解決できました!ありがとうございました。m(_ _ )m

352 名前:デフォルトの名無しさん mailto:sage [2017/07/17(月) 17:20:20.62 ID:7pjXcMGR.net]
プロシージャの中で1回しか使わないのに、わざわざ変数にするやつとかいるよね。(しかもハンガリアン記法で)

100行に満たない程度のコードなら、Withステートメント使ったほうがむしろ可読性は上がる。

353 名前:デフォルトの名無しさん mailto:sage [2017/07/17(月) 17:25:26.05 ID:l3sSLpQS.net]
マシンパワーが貧弱だった大昔ならともかく、今時はリソースを気にする必要なんてないんだから、可読性を最優先で記述するべきだよ。



354 名前:デフォルトの名無しさん mailto:sage [2017/07/23(日) 22:54:52.46 ID:EbUz/UVB.net]
>>343
ああ、俺だ。
Ubound(配列)とか、For〜Nextの中で何回も実行すると、
なんか遅いような気がして、一度変数に入れちまう。

355 名前:デフォルトの名無しさん mailto:sage [2017/07/24(月) 03:07:48.10 ID:/3vdoRrW.net]
>>345
何回も実行するなら変数に入れたほうがいいんじゃね?

356 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 23:04:37.73 ID:RmCwgyLh.net]
>>345
(1)
For I1 = 1 to UBound(xxx)
For I2 = 1 to UBound(xxx)
(2)
J=UBound(xxx)
For I1 = 1 to J
For I2 = 1 to J

普通に考えて本のチョット早いと思われますが、記述の労力ほどじゃない。
他の方の書いてますが、今は、処理速度が物凄く早くなっています。
気にしなくていいと思います。
ただし、私はEXCELでVBAを書くのですが、シートのセルに書き出すと物凄く遅くなる。
VBAの配列とかメモリーならばほとんど気にしなくていいです。
ですから、メモリー内で処理して最後の最後にシートに書くようにしてます。

357 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 08:26:52.52 ID:tqo/3wkP.net]
>>347
> ですから、メモリー内で処理して最後の最後にシートに書くようにしてます。
基本中の基本だからいちいち書かなくてよろし

358 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 10:53:29.80 ID:WmSrV0rS.net]
アノニマスに入会したいんですがVBA知ってるだけで入れますか?
あと入会ってどうやんの? スーツ着て履歴書持って事務所に面接に行くの?

359 名前:デフォルトの名無しさん [2017/09/05(火) 12:25:17.40 ID:P2jRu54V.net]
たまにハローワークに求人出てるから行ってみれば?

360 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 02:10:43.27 ID:2wFcaigK.net]
超初心者です
同じブック内の複数のシートにある顧客データをUserFormを用いて(検索するイメージ)抽出し、別のシートへ出力するコードを書きたいのですがいまいちわかりません。
大変困っているのでヒントをくださればありがたいです。

361 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 02:30:21.88 ID:U3/YorLf.net]
>>351
超初心者には無理です
パソコン教室に通ってせめて初級をクリアしてから質問してください

362 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 04:10:40.96 ID:2wFcaigK.net]
>>352
返信ありがとうございます
Excel自体触ったことない超初心者ですが頑張っているところです( ??? )

363 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 08:28:28.15 ID:GFFccSR9.net]
>>351
自称初心者がどこでUserFormとか覚えたの?
まずはシート上でやってみようね



364 名前:デフォルトの名無しさん [2017/09/12(火) 12:27:40.35 ID:7XJfZGpJ.net]
どこで覚えようとお前の知った事じゃねえだろw
なんだこのバカはwww

365 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 13:06:30.39 ID:N1ygkJfx.net]
>Excel自体触ったことない超初心者

ユーザーフォームを作ったことはあるのか?
 無けりゃ、この時点でやろうとしていることはもう無理

VBAはほんの少しでも書いたことはあるのか?
まぁ最初は>>354の言うようにシート上で実現して、それをユーザーフォームにもっていくのが順当
というか触ったこと無いって時点で釣り確定

366 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 16:38:53.70 ID:2wFcaigK.net]
VBA参入門書とネットの知識を詰め込みました。
Excel初心者は本当です。友達に教えてもらいつつやっています。気分を害された方、すみません。
>>356さん非常に分かりやすいです。
二日間くらい最初からコードを書こうとしてもがいていましたが、マクロの記録が使えそうな気がします。
そのコードをいじってボタンで起動するユーザーフォームとくっつけるイメージで挑戦してみます。

367 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 16:41:08.80 ID:2wFcaigK.net]
>>354さんもありがとうございます!参考&励みになります

368 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 20:34:49.57 ID:/wKXVszF.net]
このスレで一番の基地外が満を持して遅れて登場

369 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 20:51:47.27 ID:U3/YorLf.net]
俺のことかな?

370 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 00:17:05.57 ID:DHqL5rdG.net]
>>357
ユーザーフォームでその機能を実現する必然性が感じられない
フィルタオプション機能を用いて、検索結果の出力先を新規シートに設定するだけで事足りると思うぞ

371 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 07:47:53.75 ID:w7wWQUJY.net]
フィルタオプションとマクロの記録で8割方完成できるな

372 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 10:19:31.10 ID:wFtq+9vG.net]
ADOの事でちょっと質問です
変数を定義する時に

Dim wkR as New ADODB.Recordset

ってするんだけど、RecordsetとRecordの違いって何?

373 名前: mailto:sage [2017/09/15(金) 10:57:55.87 ID:oEkV+GvG.net]
matsuri.2ch.net/test/read.cgi/morningcoffee/1472464096/



374 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 06:42:59.71 ID:xbe9SlrW.net]
>>361-362 ありがとうございます、簡単なプログラムですが完成して感動しました。
Ifとマクロの記録が万能すぎることを肝に銘じてこれからもがんばります( ??? )

375 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 15:10:56.93 ID:7Xxpypu9.net]
>>365
万能過ぎないけどね。
そればっかり使ってる人は永遠に初心者なままだし、色々な面で出来の悪いプログラムになる。
自動生成されたコードのそれぞれの意味を理解して自分なりに書けるようになると上達する。

例えば
Range("B4").Select
Selection.Value=10
のようなコードが生成されると思うけど意味を考えたら
Range("B4").Value=10
で良いとわかるよね。

376 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 20:44:49.78 ID:ydCO3vgD.net]
>>363
Recordset オブジェクト
https://msdn.microsoft.com/ja-jp/library/cc364264.aspx
Record オブジェクト
https://msdn.microsoft.com/ja-jp/library/cc364270.aspx

377 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 23:50:59.42 ID:XctjYupl.net]
すみませんお力添えをお願いします!
エクセルマクロ(VBA)の件でお尋ねいたしたく思います!
まずグラフの系列名はセル参照で表示させてます
シート名:あいうえお
適用グラフ:グラフ4
系列範囲:A11:Z11
必要なデータ選択は全ての系列で済ませています
あとはグラフで不要な系列を削除したいため、グラフに乗せたくない系列名は”×”になるようにしてます
この系列名”×”をVBAで自動的に削除させることは可能でしょうか?
またグラフは別シートの数値入力をもって自動作成される仕様にしているので、トリガーは設けません
デフォルトだと全部”×”のため(初めは数値データの入力がないため)
数値が入ると正しい系列名に変更されるため、VBAではまず”×”で削除して、”×”以外の系列名に変わったら復活するという構想を練っています
とりあえず、まず”×”を消すコードを見よう見まねで書いてみたのですが動作しませんでした
消すのは良いですが復活させるのも組み込むとなるとちんぷんかんぷんです
是非ともご教示お願いします!
Sub test()
Dim d As Long
Dim i As Long
Dim j As Long
For i = 2 To Sheets.Count
d = Range("A11:Z11").End(xlUp).Row
With Worksheets(i).ChartObjects("グラフ 4").Shapes.AddChart.Chart
.ChartType = xlLineMarkers
For j = .SeriesCollection.Count To 1 Step -1
If .SeriesCollection(j).Name <> "×" Then
.SeriesCollection(j).Delete
End If
Next j
End With
Next
End Sub

378 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 20:55:54.78 ID:2SFxAhMD.net]
>>367
説明サイトへのリンク、ありがとう。
取り敢えず、「階層構造のデータ間を移動する手段として」のRecordオブジェクトは使うこと無さそうw

379 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 01:17:31.22 ID:2dxgF4qE.net]
IF文初心者ですが
3つ数字の中から一番小さい数を判定したいのですが、
elseや入れ子で複数書けば判定できるというのは推測がつきますが
最も簡潔に記述するとしたらどんな記述方法がありますでしょうか?

例)
33 12 3

3を抽出

380 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 05:19:03.75 ID:mkPuPLWs.net]
>>370
最小値 = WorksheetFunction.Min(Array(33, 12, 3))

381 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 05:37:31.94 ID:mkPuPLWs.net]
>>370
x = 33
y = 12
z = 3
If x < y And x < z Then
  最小値 = x
ElseIf y < x And y < z Then
  最小値 = y
Else
  最小値 = z
End If

382 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 21:28:21.10 ID:j1SDXypf.net]
>>372
>>371
明確な答えをありがとうございます。
やはりIFの場合は372が妥当なようですね。

383 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 22:56:33.81 ID:8rkXkN3+.net]
>>372は < じゃなくて <= にしないと誤判定する



384 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 06:56:36.59 ID:zUC9dslV.net]
例題の対象が3ではなくて1000とかに増えたら破綻するだろw

385 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 07:13:14.29 ID:TPoybrYY.net]
>>375
数字3つという前提を勝手に変えるこういう馬鹿はなんだろう

386 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 09:34:43.90 ID:KphHXryq.net]
汎用性を考慮しないのか。
なかなかひどい。こういう人もいるという参考になったわ。

387 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 09:37:13.81 ID:oVXNeyl2.net]
ソートアルゴリズム書くだけやん

388 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 09:54:47.89 ID:yLI54yGL.net]
372のはアルゴリズムと言うよりその場しのぎの対応

389 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 10:13:30.00 ID:yLI54yGL.net]
配列に入れてループで最小値と比較して小さければ最小値を更新していくのが定石なのでは。

390 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 10:29:30.23 ID:WIc1mdfR.net]
だからMin関数で一発なのに、無駄に車輪の再発明をしたがるやつが多くてリンダ困っちゃう

391 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 10:32:40.77 ID:4is4PUWl.net]
>>379
順次比較も立派なアルゴリズムの一種なんだが

392 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 14:42:52.69 ID:KphHXryq.net]
これはひどい

393 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 14:57:48.38 ID:WETwNkme.net]
IF初心者とか言ってる人に何言ってるんだか

あといつからこのスレはEXCEL VBA限定になったんだ



394 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 20:39:03.91 ID:zUC9dslV.net]
>elseや入れ子で複数書けば判定できる
>最も簡潔に記述するとしたらどんな

という問いに、elseや入れ子の回答するのは無能以前に答えになってないのとちがう?

395 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 22:15:07.62 ID:250/7oh7.net]
え?え?日本語理解できてる?
質問には「Elseを使わずに」なんてどこにも書いてないぞ

ざっくり意訳すれば「IfとElseの数を最小に」する方法を聞いてるんだろ

396 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 06:12:18.34 ID:6cN/4Ux4.net]
372のは374が書いてるように、例えば
x=1
y=1
z=3
と入れただけで誤判定する。アルゴリズムの最低限を割ってるぞ。
372がベストアンサー(笑)だと質問者が思ったなら気の毒なので念のため。

397 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 07:50:16.98 ID:nAanI8EG.net]
そもそも計算量も最少じゃないしな
普通に

最小値 = x
If y < 最小値 Then 最小値 = y
If z < 最小値 Then 最小値 = z

ってやる方がわかりやすい

398 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 10:07:44.78 ID:hX9NlXap.net]
うん、ベストアンサーはMin使った方だね。
俺だったら迷わずMin使用する。
同時にMin使わない方法も考える。
配列ループも考えた。

でも、別にIf文使っても良いんじゃない?
そんな目くじらを立てるようなことじゃない。

399 名前:デフォルトの名無しさん [2017/09/23(土) 12:22:56.52 ID:/uotOgAp.net]
>>386が分かってないバカ多すぎw

400 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 14:36:58.57 ID:OMtgmcpv.net]
だから372はif elseだとしても最小(計算量的に)の答えにもなってないし、そもそも答えとして間違ってるって話だろ

401 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 17:06:13.24 ID:HTwX+3ra.net]
それは勉強する奴と仕事にしてる奴のスタンスの違いだな。
仕事にしてる奴はIfを使わなきゃならないなんてことに遭遇しないから、はなっから抜けてる。

402 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:00:39.63 ID:9AVefP05.net]
必ずIfを使う縛りなら>>388がベストアンサー
ソートアルゴリズムの最初の1回目のループを展開してるだけなんだけど、基本中の基本のやり方

403 名前:デフォルトの名無しさん [2017/09/23(土) 23:28:57.04 ID:UvR7p8sn.net]
>>392
if文の使い方を聞かれてmin()関数を教えるような人はプログラムを仕事にしないで欲しいのです
いえ、仕事をしないで欲しいのです



404 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:49:29.12 ID:9AVefP05.net]
仕様書はちゃんと読んで、条件は無視しちゃいけないよね

405 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 02:12:05.73 ID:3B64fACL.net]
勉強のため何が何でもIfだけで解決しなきゃいけなかったのか、
まだ初心者だからMinという便利な物があることを知らなかったのか
それによって変わってきちゃうからー

406 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 08:43:50.06 ID:LX+6AD0q.net]
>>395
仕様書ならそれが正解
しかし案件定義なら顧客が何をしたいかを読み取ってより良い方法を提案することも必要
そもそも>>370にはIf使えとは書いてないし

407 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 09:20:40.69 ID:SDtHFGLj.net]
>>394
分かってねえなあ。
勉強を教える仕事じゃないならユーザーにとって一番使いやすいとか、速度が速いとか、ユーザーが満足するようなものかどうかが大事なのであって、どんなコードじゃなければならないとかの要望は普通無い。
そして、メンテナンス性とかコードの書き方に関してもMinの方が良いとなればそもそもの問い掛け自体仕事で発生することは無い。

そして実際には、何でMinじゃ駄目なのと問い掛けられない奴は仕事の出来ない奴ということになる。
(もちろん明確に理由が有るならIfで書く。)
指示通りにしか作れない奴じゃ単なるコーダって奴になるしかない。

仕事ではMinを使わないなら明確な理由が存在するし、打ち合わせなんかのやり取りで既に意思統一されてる筈だ。
つまり今回の問い掛けのような事態は存在しない。

408 名前:デフォルトの名無しさん [2017/09/24(日) 10:07:44.74 ID:lViLIhLn.net]
>>393
だな、簡素で分かりやすく奇麗なコードだ

409 名前:デフォルトの名無しさん [2017/09/24(日) 15:00:43.73 ID:3BjqQEbI.net]
>>398
なんか仕事をしてる体で話してますけど
あなたの想像上の仕事では自分にとって都合の悪い事態は存在しないのですね
さぞかし楽しかろうとは思いますが
あなたは社会に出ないでください

410 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 16:46:42.97 ID:jWeMnfEt.net]
>>400
仕事をしたことの無い奴には分かるまいw

411 名前:デフォルトの名無しさん mailto:sage [2017/11/08(水) 05:55:55.96 ID:mrDDFdOE.net]
こっちを再利用?

412 名前:デフォルトの名無しさん [2017/11/08(水) 09:41:10.42 ID:VRSOCYqC.net]
再利用したいけどExcelの話をしたいときに困るのかな

413 名前:デフォルトの名無しさん mailto:sage [2017/11/08(水) 10:15:34.15 ID:6WBHyYXn.net]
そのうち立つんじゃね



414 名前:デフォルトの名無しさん mailto:sage [2017/11/08(水) 11:10:32.82 ID:JKxKdsR3.net]
「Excelの話」したいんだったら総合相談所でやれ

415 名前:デフォルトの名無しさん [2017/11/08(水) 11:59:42.12 ID:VRSOCYqC.net]
なるほどなるほど

416 名前:デフォルトの名無しさん [2017/11/08(水) 12:50:47.32 ID:+KUB1/9h.net]
早速質問
今vbaでマップ使って
とある表の集計を行なっております
一つのkeyに対しアイテムが複数あるので
配列で入れようと思ったのですがうまくいきません
何か良い方法はありませんか?

417 名前:デフォルトの名無しさん mailto:sage [2017/11/08(水) 16:45:58.99 ID:pE/cp7rq.net]
もう少し具体的にどうぞ

418 名前:デフォルトの名無しさん [2017/11/08(水) 21:23:36.05 ID:+KUB1/9h.net]
>>408
一つのキーに対して複数のアイテムがある
これをどうにかこうにか出来ないか

やりたいことは
キーが重複された二次元配列を
グループ化&合計を取りたい

419 名前:デフォルトの名無しさん [2017/11/08(水) 21:28:10.43 ID:aQlO1Uq5.net]
>>409
エクセルならピボットテーブルでいいんじゃない?

420 名前:デフォルトの名無しさん [2017/11/08(水) 21:32:09.19 ID:+KUB1/9h.net]
>>410
自動で計算させるんだよ

421 名前:デフォルトの名無しさん [2017/11/08(水) 21:33:56.61 ID:aQlO1Uq5.net]
>>411
ピボットテーブルをvbaで作ればいい

422 名前:デフォルトの名無しさん mailto:sage [2017/11/08(水) 21:38:43.05 ID:vt31E4Mm.net]
エスパーじゃないんだから、もっと具体的に説明しないと、何がしたくて何ができないのか判んないよ。
そして多分だけど普通にifで分岐するプログラムを書くだけだと思う。

423 名前:デフォルトの名無しさん [2017/11/08(水) 21:40:37.09 ID:0sSRKP/b.net]
いや多分



424 名前:forでループするプログラムを書くだけだと思う []
[ここ壊れてます]

425 名前:デフォルトの名無しさん [2017/11/08(水) 22:38:17.07 ID:+KUB1/9h.net]
データシート
キー 金額a 金額b
1 10 20
2 20 50
1 30 90

結果(期待)
キー 金額a 金額b
1 40 110
2 20 50



上のような感じのシートがあって
集計かけたり
平均とったり
最大値だったりしたい

426 名前:デフォルトの名無しさん [2017/11/08(水) 23:08:47.37 ID:aQlO1Uq5.net]
>>415
そのくらいの事を自分でできないなら
ピボット使った方がいいと思うぞ
バグって計算結果が合わないから

427 名前:デフォルトの名無しさん [2017/11/08(水) 23:25:51.57 ID:0sSRKP/b.net]
そのくらいの事を自分でできないから質問してんだろ
そのくらいの事を理解できないなら質問スレに来ない方がいいのに

428 名前:デフォルトの名無しさん [2017/11/08(水) 23:38:17.91 ID:aQlO1Uq5.net]
そのくらいの事も判らない人にも実現できる方法を提案してるだろ

429 名前:デフォルトの名無しさん mailto:sage [2017/11/09(木) 00:17:55.65 ID:hDRDp7cw.net]
https://i.imgur.com/wtkTdlA.png
上のように各列の情報に応じて、一定の条件にヒットしたら評価欄に追記、ということをしているのですが、
上手い書き方が思いつかず、冗長で読みにくいコードになってしまいます
https://i.imgur.com/cE0kOho.png

どうすれば綺麗で読みやすいコードになるでしょうか?

特に、変数(ここでは「評価」)の参照先のセルに書き込みつつ、変数の値自体も更新するスマートな方法と
If文で2つの条件が当てはまった場合に両方の処理を実行させる(ここでは40点以下と60点未満のIf文を一つで済ませるとか)方法があれば知りたいです

430 名前:デフォルトの名無しさん mailto:sage [2017/11/09(木) 03:11:02.61 ID:HAMnFTNh.net]
>>419
配列を使え
あとソースを読んだり修正したりやりにくいから画像にせずそのままテキストとして貼ってくれ

科目 = Array("国語", "算数", "理科")
For j = 0 to 2
  点数 = i.Offset(0, j + 1)

  If 点数 <= 40 Then
    i.offset(0, -1).Value = i.offset(0, -1).Value & 科目(j) & "の点数が以下略" & vbCrLf

みたいな感じで教科の数に関わりなく記述を1回にできる
条件が3つ以上ある時はCaseで分ける方法もあるけど、どんどん文字列を追加するならIfを並べる今の書き方で別に悪くない

431 名前:デフォルトの名無しさん mailto:sage [2017/11/09(木) 08:39:48.02 ID:m3IDSHjM.net]
ありがとうございます、やってみます
(コードは行数制限とインデントが反映されなかったのでつい画像に…すみません)

432 名前:デフォルトの名無しさん [2017/11/10(金) 08:15:39.86 ID:vvDXnBRS.net]
オートフィルの連続データでA1が0なら終わりでそれ以外なら下にオートフィルの連続データを追加して行くってどうやればいい?

433 名前:デフォルトの名無しさん mailto:sage [2017/11/10(金) 08:52:12.12 ID:EDTrdPIL.net]
何をどこまで追加すんの?



434 名前:デフォルトの名無しさん [2017/11/10(金) 09:18:59.30 ID:vvDXnBRS.net]
下に一つオートフィルの連続データを追加してもしもその数が0以外ならばその下に一つづつ追加してもし0になったら終わるってことです

オートフィルの連続データまでは成功しました!

435 名前:デフォルトの名無しさん mailto:sage [2017/11/10(金) 12:58:08.94 ID:MIqJX5DT.net]
>>424
何をやりたいのかさっぱりわからんから
> オートフィルの連続データまでは成功しました!
のコードを晒してくれ

436 名前:デフォルトの名無しさん mailto:sage [2017/11/10(金) 22:07:12.41 ID:KbRkXeO5.net]
何をどーしたいのかよーわからんが、
オートフィルの連続データが完成したならDo  While Loopでも使えばいいんじゃね

437 名前:デフォルトの名無しさん [2017/11/11(土) 10:59:01.85 ID:t1iacSS7.net]
そうですね連続データと探す作業分けてDo until使ってみたら目的は達成できました ありがとございます

438 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 11:42:09.40 ID:DcGHOE5h.net]
漠然とした質問で申し訳ない
コレクションというのがあるけど、その利点というかこういう場合に使うとかという
のを教えてくれないだろうか。配列は動的配列も含めてよく使うけどコレクション
というのはあるのは知ってるけどどういう場合に使うものなのか判らない。
(まぁそれでも何とかなってるということは今の時点ではそれでも問題ないって
ことでもあるんだけど)

439 名前:デフォルトの名無しさん [2017/11/16(木) 12:38:12.83 ID:Xd3mhum+.net]
>>428
Dictinonaryだとキーが重複してたらエラーになるから
重複させたくない場合は便利だと思う

あと既にそのキーが登録してあるか調べるメソッドがあるから便利

配列でも実現出来るけど生産性の問題だと思う

440 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 12:40:16.53 ID:+IKZz2Nz.net]
>>428
Excelならコレクションは知らないうちに必ず使ってるから心配しなくてもいい

オブジェクトを複数まとめた物がコレクションで、例えばワークシートオブジェクトをまとめた物もコレクションの一種
新規ブックを作るとワークシートが3枚あるじゃろ?それがもう既にコレクションなんだわ

名前をよく見ると「Worksheets」って複数形になっとるじゃろ?これが「複数まとめた」コレクションを示しておるのじゃ

441 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 16:08:34.06 ID:mcjOn36E.net]
>>428
コレクションの便利さを実感できるのは、For Each 〜 Nextとか

442 名前:デフォルトの名無しさん [2017/11/16(木) 17:01:22.70 ID:yjV64GpF.net]
For Each
配列でも使えるけどね

443 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 19:57:40.06 ID:NwFToy+4.net]
広い意味では配列もコレクション
元質問のコレクションが何指してるか質問からは分からん



444 名前:デフォルトの名無しさん [2017/11/16(木) 22:05:24.15 ID:CQAbf3aD.net]
>>433
どの言語でもコレクションの定義は曖昧だからなあ。

配列のように物理的に連続したメモリ領域で動かせないものが配列。

445 名前:428 mailto:sage [2017/11/17(金) 16:52:50.63 ID:wkN6jGAZ.net]
気付かないうちにコレクションを使ってたってのは、あぁそうなのかって感じですけど

>元質問のコレクションが何指してるか

思い浮かべてんのは連想配列とかディクショナリとかってやつですかね。
ディクショナリが重複チェックにも使えるってのは知りましたが。
今現在動かしているのをディクショナリに変えて見ようかなとと思ってます。
どちらにしろ自分で判らないことにはすすまんので。

後、曖昧模糊とした質問に答えてくれた皆さん、ありがとう

446 名前:デフォルトの名無しさん [2017/11/17(金) 18:29:39.77 ID:71HLXjvB.net]
連想配列は配列と言いながら実体はコレクション

447 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 09:55:58.36 ID:8LVfn2cG.net]
配列数の制御がめんどいし
個々のデータ型も合わせんでいいし

448 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 20:25:41.56 ID:TCtIBT5G.net]
感覚的な話になるけど、例えばA列、B列、C列には○と×が入っててD列には何かの名前が入ってる時に、A、B、Cの組み合わせが×、○、○の時のD列の名前を表示したいとするわな。
こういう場合は一行ずつ見て行って×、○、○の組を探すわな。
こういう場合はFor Next使うわな。
つまり普通の配列が感覚に合う。

一方、A1:F100の範囲の各セルで1つだけ○、他は全て×の時に○のアドレスを知りたいなんて時には見つかるまで全てチェックすれば良いわけで、どう見ていくかなんて関係無いわな。
こういう場合はFor Each Next使うわな。
つまり連想配列が感覚に合う。

449 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 22:00:10.14 ID:jY4FOG+m.net]
>>438
そんなもん普通はvlookup使うわな。

450 名前:デフォルトの名無しさん mailto:sage [2017/11/20(月) 09:52:50.14 ID:6BLE5ZLY.net]
>>439
ばーか。
感覚を例として挙げてることが分からないバカは黙ってろ。
もっと上手い方法があるだろうことは最初から分かってる。

順番を意識しないIteratorの感覚を説明してる。
コレクションにだって順番は実際はある。
しかしそれを意識しないような場合にぴったりということだ。

451 名前:デフォルトの名無しさん mailto:sage [2017/11/20(月) 11:39:33.25 ID:VyTKZ5qI.net]
ああ言えばこういうわな

452 名前:デフォルトの名無しさん mailto:sage [2017/11/20(月) 19:55:38.19 ID:9xFKx2hL.net]
他人の回答の批判とかするほうがおかしいね
質問に対して自分の考えで回答すればいいのに

453 名前:デフォルトの名無しさん [2017/11/20(月) 20:06:38.53 ID:Pkea+7u9.net]
適当に批判してやらなきゃお前ら好き勝手に質問と関係ない事ばかり言うじゃん
批判してくれる奴に感謝しろよw



454 名前:デフォルトの名無しさん mailto:sage [2017/11/20(月) 22:04:34.15 ID:9xFKx2hL.net]
質問と関係ないこと言ってもいいと思うけどなんでそれが駄目なのかな?

455 名前:デフォルトの名無しさん [2017/11/20(月) 22:24:58.18 ID:Pkea+7u9.net]
>>444
自分は質問と関係ない自分語りするけどそれを批判されるのは許せないってか?
どんだけワガママに育てられたんだお前は

456 名前:デフォルトの名無しさん mailto:sage [2017/11/20(月) 23:53:15.67 ID:9xFKx2hL.net]
>>445
感謝しろよ

457 名前:デフォルトの名無しさん mailto:sage [2017/11/29(水) 12:35:10.96 ID:rUGEU7g7.net]
ドカタ仕事の憂さ晴らしをここでやるのはやめてほしいと思うのです
汚い言葉を使うのは本人は無頼漢的にイケてるつもりかもしれないけど
側から見ると貧乏くさいのです

458 名前:デフォルトの名無しさん mailto:sage [2017/11/29(水) 15:23:49.10 ID:3jZS2ju5.net]
のです

459 名前:デフォルトの名無しさん mailto:sage [2017/11/30(木) 12:22:49.90 ID:xlQjmi4Q.net]
accessの条件付き書式について質問です。
FormatConditions.Add(acExpression,,
の後の式は変数を展開してくれないでしょうか?
また、関数の呼び出しも出来ないでしょうか?
例えばmonth関数は呼び出して戻り値が得られるのですが、自作関数だと呼び出せなくて困っています。

460 名前:449 mailto:sage [2017/11/30(木) 21:43:31.97 ID:xlQjmi4Q.net]
解決しました。関数使えますね。変数はまだ試していませんが、たぶんダメでしょうね。

461 名前:デフォルトの名無しさん mailto:sage [2017/12/01(金) 18:18:22.33 ID:pnEu13zx.net]
Includeのようなことはできないでしょうか?
参照設定ではありません。

現在、ユーティリティ関数を集めたxlamファイルがあるのですが、中身が膨れ上がってきました。
機能単位でファイルを分割したいのですが、
そうすると今まで参照設定でutility.xlam1つで済んでいたのが、
utility_picture.xlam
utility_text.xlam
utility_workSheet.xlam ...
と、いくつも参照しなくてはならなくなります。

utility_xxx.xlamをすべてインクルードした1つのファイルを作り、
それを参照すればすべて使える、というようにしたいのです。

こういうことはできるでしょうか。

462 名前:デフォルトの名無しさん mailto:sage [2017/12/01(金) 18:51:00.09 ID:eRljVU/z.net]
似たようなことはできるんじゃね

463 名前:デフォルトの名無しさん [2017/12/01(金) 19:38:52.29 ID:xB5YUWoV.net]
>>451
ひとつのxlamがいくつの標準モジュール、クラスモジュールを持ってるの?
VBAでそんなに大きくなるイメージがいまいち湧かないんだが



464 名前:デフォルトの名無しさん [2017/12/01(金) 19:54:29.89 ID:WVxyYcg9.net]
なんでも詰めこめばいくらでも大きくなるだろw
どんだけ貧困なイメージ力だよw

465 名前:デフォルトの名無しさん mailto:sage [2017/12/01(金) 22:49:56.60 ID:kRHH2X4z.net]
なんでも詰め込んで大きくなったならダイエットしろというアドバイスになるだろw

466 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 00:01:54.31 ID:ab3YxIeg.net]
ダイエットするとチンコも細くなるんじゃね

467 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 00:51:50.91 ID:aL/u+cy3.net]
>>451
そういう運用は良いのかという問題がある。
それぞれのアドインがバッティングしないのなら、そもそもアドイン1つに纏めるべきじゃね?
カテゴリが別だからとか色々理由が有るんだろうけど、その理由がそのままいくつも参照すべきという理由になるだろ。

アドインを1つに纏めるべきかいくつも参照すべきのどちらかじゃね?

468 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 10:54:25.96 ID:7He58R5A.net]
>>457
・プロジェクトエクスプローラが縦に長くなりすぎて使いづらい。
・巨大なクラスになるとfacadeパターンを使って分割しているのですが、
 その際に処理を委譲するクラス名にxxx_reader, xxx_outputter等つけています。
 ファイルを分けられれば単にreader, outputterで済むのですっきりさせたい。
この辺が分けたい理由です。
触るのが久しぶりだったので忘れていたのですが、a→b→cで参照が連鎖している場合、
a→cの参照がないとaからcの関数を呼び出せないだけで、プログラム自体は動くんですね。
いくつも参照でやってみようと思います。

>>453
単一目的のマクロ(そのutilityを呼び出す側)はそれほど大きくならないのですが、
画像操作、データシート処理のラッパー、デバッグ機能など
汎用的に使える機能をutility一つにまとめて行ったら大きくなってしまいました。
この辺を別ファイルにしようと思っています。

469 名前:デフォルトの名無しさん [2017/12/02(土) 12:26:31.44 ID:zSxtsSJv.net]
どうせ使う時は全部必要なんだろw
無駄なことすんなw

470 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 13:17:30.17 ID:7He58R5A.net]
使うときは割と全部必要ですが、細かく分かれていないと
機能追加やリファクタリングが面倒なんですよ。
モジュールをディレクトリ分けしてツリー構造にするような
ことができれば一番いいんですが。

471 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 00:26:04.64 ID:R5bnWQiD.net]
出来るかどうか知らんが
親のユーティリティで子を自動的に参照設定すればいいんじゃね
たしか参照設定もVBAからいじれたはず

472 名前:デフォルトの名無しさん mailto:sage [2017/12/07(木) 12:49:30.75 ID:C5q9p8Fb.net]
ほまは

473 名前:デフォルトの名無しさん [2017/12/09(土) 18:42:21.44 ID:YxeiwW1g.net]
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim objMe As Recipient
Set objMe = Item.Recipients.Add("domon@sapporotakusho.co.jp")
objMe.Type = olBCC
objMe.Resolve
Set objMe = Nothing
End Sub

検索すると出てくるこのプログラムだと、
再送しようとした場合、BCCが複数追加されてしまいます

Outlookで自動的にBCCを設置するプログラムは調べたら乗っているのですが
BCCに既に設定したいアドレスがあった場合は追加処理をしないというプログラムを追加したいです



474 名前:デフォルトの名無しさん mailto:sage [2017/12/09(土) 22:22:36.98 ID:kQB3PqQK.net]
>>463
変数objMeを宣言している行の直前に以下の処理を追加

Item.BCCプロパティに設定されている文字列を取得して、その中にdomonなんたらっていうアドレスが含まれているかどうかをInStr関数で調べる
含まれていたらExit Sub

475 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 10:15:21.59 ID:DS9ojUbh.net]
ありがとうございます

間違えてメールアドレスそのまま載せてしまいました
やってしまった…

もう一度頑張ってみます

476 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 05:30:44.06 ID:LzUTFJWj.net]
滅入るよね

477 名前:デフォルトの名無しさん [2017/12/18(月) 22:21:50.88 ID:gUtmU3pD.net]
Excelに「Python」搭載検討 Microsoftがアンケート実施中
https://headlines.yahoo.co.jp/hl?a=20171218-00000045-zdn_n-sci


Python知らんけど余計なことすんなボケ

478 名前:デフォルトの名無しさん mailto:sage [2017/12/19(火) 07:02:00.39 ID:hrV3NPqq.net]
VBAとPythonが併用できるのかな?
前例あるの?

479 名前:デフォルトの名無しさん [2017/12/19(火) 08:02:47.16 ID:QIKPQsgo.net]
一営利企業の一製品に過ぎませんから

480 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 06:37:14.56 ID:LSGNQ/gQ.net]
ざんねん!

481 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 11:51:23.41 ID:3p ]
[ここ壊れてます]

482 名前:B/qkZc.net mailto: python入る言うてもどのバージョンかとかライブラリかとかアップデートはするのかとか色々課題あるだろ []
[ここ壊れてます]

483 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 12:20:39.14 ID:HAPJI9RJ.net]
質問なのですが、別表の項目から他の表の項目(セルの位置)にデータを飛ばしたいんですが、できますか?



484 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 12:55:31.94 ID:MSU0yE0z.net]
できます。

485 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 13:07:55.93 ID:HAPJI9RJ.net]
ご教授ねがいたいのですが

486 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 13:19:32.33 ID:Hqq1J0vI.net]
×ご教授
○ご教示
あと、見も知らぬ他人にタダで教えてもらうんならそれ相応の作法は必要じゃないのって、端で見てて思う

487 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 13:38:48.56 ID:ULmYwE81.net]
>>472
もっと具体的にどんなのが作りたいか書いてもらわないと難しいです。

5列目を変更した時に同じシートの1列目を選択するようにしたい、とか。
あるいは、別のシートのA1セルを選択したいとか。

飛ばすといっても、そのタイミングが変更した時なのか、選択したときなのか、特定の数値が入ったときなのか。

488 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 14:35:16.74 ID:HAPJI9RJ.net]
こんな感じの表Aがあって、似たような表Bが別シートにあるんですけど、
表Aのセルの色を付けると同時にB表のセルのイロを変える

または、セルの文字も一緒に持ってくる

できますか?
https://i.imgur.com/u3mc1ot.jpg

489 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 14:36:19.20 ID:HAPJI9RJ.net]
すいません、よろしくおねがいします

490 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 16:44:16.87 ID:WTDPcIn+.net]
できるけど、コード教えてもらって、それを標準モジュールなり、sheet1モジュールなりに書き写せます?
それを使いやすいように改良できます?

491 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 17:08:48.29 ID:WTDPcIn+.net]
できるって書いたけど、色を変えるのをイベントにするのは無理だから、マクロをボタンに登録するか、何かほかのイベントに割り当てるかしないとダメだわ。

492 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 17:26:04.37 ID:HAPJI9RJ.net]
書き写しくらいはできます!

493 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 18:45:37.13 ID:/25QAGMM.net]
>>477
RaiseEventを使う



494 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 19:01:57.40 ID:KaDWqQ6/.net]
>>482
お忙しいのにみなさんありがとうございます
ちょっと詳しく説明すると、こんな感じです
左のsheetの表は一項目につき3段、その3段目の情報で仮にA,Bが記載されてある色つきのセルの情報のみを抜き出し、右にある別sheetの表に反映させたいのです

分かりづらかったらすいません

どのように組めば行けるのか、詳しく教えて頂くとありがたいです


https://i.imgur.com/M5bti06.jpg

495 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 08:27:26.24 ID:zry4uQ/L.net]
指1本で核ボタン押せる

496 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 08:28:00.51 ID:zry4uQ/L.net]
>>484
スマン激しく誤爆

497 名前:デフォルトの名無しさん [2018/01/26(金) 09:48:49.15 ID:zry4uQ/L.net]
おわび
御貴兄たち、何卒添削お願いします。変数colとかrowのほうが良かったな
Const OFFSET_X = 1
Const OFFSET_Y = 1
Const BLOCKS_Y = 3
Const WIDTH = 6
Const HEIGHT = 6
Private Sub CommandButton1_Click()
  Dim src As Worksheet
  Dim dst As Worksheet
Dim x As Integer, y As Integer
Dim des_x As Integer, des_y As Integer
  Set src = ThisWorkbook.Sheets("sheet2")
  Set dst = ThisWorkbook.Sheets("sheet3")
  dst.Cells.Clear
  des_x = 1 + OFFSET_X
  des_y = 1 + OFFSET_Y
  For y = 1 + 3 To HEIGHT * BLOCKS_Y Step 3
    For x = 1 To WIDTH
      If src.Cells(y, x + OFFSET_X).Value <> "" Or _
        src.Cells(y, x + OFFSET_X).Formula <> "" Or _
        src.Cells(y, x + OFFSET_X).Interior.ColorIndex <> xlNone Then 'エラー判定は無し
        src.Range(src.Cells(y, x + OFFSET_X), src.Cells(y, x + OFFSET_X)).Copy _
           Destination:=dst.Cells(des_y, des_x)
      End If
      des_x = des_x + 1
    Next x
    des_x = 1 + OFFSET_X
    des_y = des_y + 1
Next y
End Sub

498 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 10:05:41.40 ID:cX+GX3c5.net]
これ色付き以外のセルにも文字列は入ってるんだよな?

499 名前:486 mailto:sage [2018/01/26(金) 11:04:59.89 ID:HJtMv0FJ.net]
あー〜スマン
>表Aのセルの色を付けると同時にB表のセルのイロを変える
この仕様を見逃してたわ
見なかったことにしてくれ

500 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 19:09:34.97 ID:o3fzSqcU.net]
>>487
入ってます
欲しいデータは1色で統一されてますが
ちなみに他に文字が存在しており、それらはほかの色で存在しています

>>488
お手数お掛けしております
ほんとにありがとうございます

色で判断をなくして、(条件で変えるので)>>483に書いてある欲しいデータ4種類を転記させるものでも良いのですが、難しいでょうか

501 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 19:28:54.13 ID:s5W3X/Fy.net]
できると思うけど、見本の写真がよく見えない。

502 名前:490 mailto:sage [2018/01/26(金) 21:06:22.97 ID:K81AssZX.net]
パソコンで見たら見えた。
これ、変更したところだけ反映したいの?
それとも、元表の3行目全てを反映したいの?
というか、データだけなら=で結べばいいのでは?

503 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 21:17:19.09 ID:o3fzSqcU.net]
>>491
そこまでして見ていただいて申し訳ないです

三段目だけを反映させたいのですが、その手書きの表の列、行ともに結構長い表なのです
手っ取り早く一瞬で作れたらと思って質問した次第です



504 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 21:21:20.15 ID:Vo+OzJVu.net]
Excel VBAスレいけば寄ってたかってみんなで教えまくってくれんじゃね?行けば?

505 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 00:24:57.82 ID:NUwCXosq.net]
>>493
いまはゴキブリが湧いてるからあっちは行かない方が良さそう

506 名前:490 mailto:sage [2018/01/28(日) 01:47:10.17 ID:xXGJMKWE.net]
>>492
結構長いというけど、どれくらい?
数十列数十行くらいで、1回だけなら右にオートフィルして、行ごとコピペするのが早いと思う。
=で繋ぐだけなら1回やっておけば、あとは自動でかわる。

マクロでやるとしても、数式で=を入れればいいのか、値を持ってくるようにした方がいいのか。
表の範囲指定はどうするか?
current.regionか、usedrangeか、直接指定するか。(元の表に罫線が引いてあるか、空欄があるかで変わってくる)

507 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 14:19:41.49 ID:Erw8GBm0.net]
数式だって絶対参照、相対参照をきちんと意識して書けばRange=数式でアドレスに併せて変えてくれるから1回の代入で終わる。

以外と知らずに1セルずつ代入する人もいるけど。

508 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 14:51:25.14 ID:fbEFMaxh.net]
>>495
3段目に毎回同じ文字がくるとは限らず、最低3種類の文字がくるので、とりあえずif分使って作成しました

横に日数1年分、縦に各項目50程です

絵にある通り、全く同じ表をコピペして使いますが(線あり)、ほんとは転記先の表は1段で済ませたい所でした
日替わりで最低3種類のうちのひとつが返ってきたらいいので

わかりづらくてすいません

509 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 14:52:48.13 ID:fbEFMaxh.net]
>>496
そうなんです
やり方を知らないので今は1セルずつ代入しています

510 名前:490 mailto:sage [2018/01/28(日) 17:27:50.85 ID:z3VzjyNA.net]
>>498
fast-uploader.com/file/7072682105190/

目的のものと全然違うかもしれないけど作ってみました。
データの最初のセルだけは自分で指定してください。

511 名前:490 mailto:sage [2018/01/28(日) 17:29:06.20 ID:z3VzjyNA.net]
パス 0128

512 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 18:08:34.70 ID:745uG8BQ.net]
>>499
乙です
老婆心ながらアップする前に「ブックの検査−ドキュメント検査」したほうがよろしいかと。

513 名前:499 mailto:sage [2018/01/28(日) 18:41:56.85 ID:UOLejiJq.net]
サンクスです。
渡辺明さんになるところだったか。



514 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 21:37:23.53 ID:4m06L1KL.net]
>>499
見れないのですが、消されたのでしょうか

515 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 23:12:38.58 ID:Erw8GBm0.net]
>>498
やり方も何も、例えばA1からA列に1、2、3、・・・と入力されてるとしてRange("B1:B10").Value="=A1"を動かしてみな。
全部A1を参照したいならRange("B1:B10").Value="=$A$1"とする。
本当はValueではなくてFormulaだけどValueでもちゃんと相対参照してくれる。

516 名前:499 mailto:sage [2018/01/28(日) 23:23:45.53 ID:9bi4pzKP.net]
fast-uploader.com/file/7072704922415/

パス 0128

517 名前:デフォルトの名無しさん mailto:sage [2018/01/29(月) 00:30:08.47 ID:flk0qVid.net]
>>504
>>505
みなさん、無知ですみません
ほんとに助かります
ありがとうございます

>>505
ひとまずダウンロード致しましたので明日内容を確認します
お時間割いて作っていただいて、ただただ感謝です
おやすみなさい

518 名前:デフォルトの名無しさん mailto:sage [2018/01/29(月) 00:48:46.52 ID:rWIIKeXW.net]
下から5行くらいにtext ってあるの、valueに直した方がいいかも。
textでも問題ないかもしれないけど。

519 名前:デフォルトの名無しさん mailto:sage [2018/01/29(月) 08:59:53.06 ID:flk0qVid.net]
おはようございます

昨日ダウンロードさせてもらったファイル開かないのですが、どうやったら開きますか?

520 名前:デフォルトの名無しさん mailto:sage [2018/01/29(月) 18:12:06.82 ID:acQcDZwj.net]
エクセルのバージョンは?
当方2013で開けましたよ。

521 名前:デフォルトの名無しさん mailto:sage [2018/01/29(月) 21:31:37.99 ID:flk0qVid.net]
>>509
2010です

すいません、どうやって開きました?

522 名前:デフォルトの名無しさん mailto:sage [2018/02/03(土) 14:43:09.33 ID:xQQ90zOV.net]
プログラマですがvbaの初心者です。
C,java,lisp,python 基本的な言語とその意味論はだいたい知ってます。
vbaで書籍を探すと、大抵業務問題の解決という文脈で本が書かれているようですが
純粋に言語的な機能を抽出した言語仕様、あるいはリファレンスに相当するものを求めています。

そのような書籍のうちもっとも簡潔に記述されているような本はないでしょうか?

523 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 02:06:08.04 ID:Nq0C9+DR.net]
>>511
本職のPGならマイクロソフトのディベロッパーセンターの英語版リファレンスを直に読んだ方が良い
あと、場合によってはVBAとほぼ同じシンタックスになってるVB.NET用のMicrosoft.Office.Interopクラス以下の各アプリケーションのオブジェクトのリファレンスの方が役に立つこともある



524 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 09:03:45.01 ID:PHOmwLAR.net]
テスト

525 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 09:08:27.88 ID:PHOmwLAR.net]
VLOOKUP関数の応用で、2列のリストがあり、検索セルではどちらかを入力するともう片方が入力されるものをVBAで作りたいのですが、、、

526 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 09:30:57.37 ID:VbMnR6W2.net]
>>514
左をキーにしてvlookup 、次に左をキーにしてvlookup すれば良いんじゃないか?
右と左に同じ内容が存在するとダメだけど。

527 名前:デフォルトの名無しさん mailto:sage [2018/02/09(金) 20:30:22.36 ID:fQxgZtkH.net]
テスト

528 名前:デフォルトの名無しさん mailto:sage [2018/02/12(月) 15:08:18.20 ID:IVihLGwq.net]
グラフを作成するときにXValuesってすべての系列で統一しないといけないんですか?
x1={0., 1., 2.}, y2={0., 1., 4.}
x2={0., 0.5, 1., 1.5, 2.},y2={0., 0.25, 1., 2.25, 4.}
みたいな2つの系列があったときにplot(x1,y1), plot(x2,y2)みたいに扱いたいのですがどうしたらいいでしょうか

529 名前:デフォルトの名無しさん mailto:sage [2018/02/15(木) 06:58:28.28 ID:oNAH0wTr.net]
特定のフォルダ内のすべてのブックにC列に複数存在する特定の文字列『a』のすべてに対して右隣のセルに文字列『aa』を入力して、さらに同じシート内でC列に複数存在する特定の文字列『b』のすべてに対して右隣のセルに文字列『bb』を入力するようにしたいのですがどのような感じになりますでしょうか?

530 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 06:08:56.24 ID:W1XJdyx1.net]
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆

531 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 15:07:23.94 ID:1VKCp1qU.net]
518ですが、自己解決しました。

532 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 16:09:20.27 ID:CaXwZ0Gg.net]
vbacでmdbファイルをcombineしていると、「このアクションを実行するとプロジェクトがリセットされます。実行しますか?」というダイアローグが出てくるのですが、回避策をご存じの方いますか?

533 名前:デフォルトの名無しさん [2018/03/07(水) 08:26:06.09 ID:tPOSTBDK.net]
VBA初心者です。
省略可能なキーワードOptionalに関して質問がございます。
・質問内容
以下のコードにおいて、なぜ"ABC"が2回繰り返されるのでしょうか?
Optionalで指定した1が初期値としてtmpに格納され、For〜Nextステートメントの処理が0〜1となり、回答は”ABC”のみだと考えました。

・コード
Sub Sample1()

Call Sample2

End Sub

Sub Sample2(Optional tmp As Long = 1)

Dim i As Long
For i = 0 To tmp
Debug.Print "ABC"
Next i
End Sub

基礎的な質問で恐縮ですが、ご解説いただければ幸いです。
よろしくお願いします。



534 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 09:34:45.98 ID:1c1zt9Ui.net]
>>522
0も1回と数えるから、i が0の時に1回、1の時に1回、合計で2回です

For i = 1 To tmp
にすれば1回になるよ

535 名前:デフォルトの名無しさん [2018/03/08(木) 09:50:20.87 ID:kgkGNmtQ.net]
>>523
解説頂きましてありがとうございます。
0も1と数えるのはややこしいですね。。
しっかり復習します。

536 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 17:16:49.20 ID:1OkrDYdr.net]
配列は0スタートとか知っておいたほうが良い(VBAの場合はOption Baseで切り替えられるけど)

537 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 18:23:37.87 ID:bSaoLb8p.net]
>>524
理屈で覚えればややこしくはないぞ。
配列の添字は距離のようなもので、「当該配列の1個目の要素のポインタを起点としたときに、そのポインタにどれだけ(何回)加算した場所に、その要素の格納されているメモリが存在するか」を示す数字。
1個目の要素から1個目の要素に移動するための加算回数=距離は0だから、1個目の要素にアクセスするときの添字は0になる。

538 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 20:23:06.52 ID:wcvra3LB.net]
>>514
if文でセルの指定範囲の時実行で1列目の時と2列目の時で分けたらどうですか?

539 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 21:31:26.55 ID:Tr04o/zO.net]
>>525
0スタートどころか-100スタートとかも可能

540 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 21:40:28.86 ID:Og1NJDFT.net]
こればかりはプログラマーを混乱させるために導入されたとしか思えない謎仕様

541 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 07:32:15.03 ID:KC7p8RhA.net]
こんなので混乱してるのはお前だけじゃね? w

542 名前:デフォルトの名無しさん [2018/03/09(金) 19:02:04.18 ID:M2r/B6Zk.net]
>>530
お前はバカなんだからしゃべるな

543 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 19:32:06.94 ID:CekgNpjO.net]
>>531
配列添字の範囲指定なんてPascalの時代からあるのに



544 名前:バカって悲しいな w []
[ここ壊れてます]

545 名前:デフォルトの名無しさん [2018/03/09(金) 19:47:08.42 ID:M2r/B6Zk.net]
>>532
あれ?発言を許可した覚えはないけど?

546 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 04:04:01.67 ID:hJ8m/Sii.net]
>>529
C#だとint[] intArray = new int[2]で要素は[0] と[1]になるんだが、
vbaだとdim Array(2) as Longが0,1,2の三つになるからたまにコンパイルエラーで悩む。Collectionは一から始まるが
Dictionaryは0からというのもたまに嵌る。

547 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 12:36:10.36 ID:f+B2oLbA.net]
>>534
> vbaだとdim Array(2) as Longが0,1,2の三つになるからたまにコンパイルエラーで悩む。
0,1,2になるか1,2になるかはOption Baseによる
コンパイルエラーは意味わからんが

>>533
お前が黙っとけよ w

548 名前:デフォルトの名無しさん [2018/03/11(日) 13:41:16.21 ID:1qbV0tMy.net]
>>535
オマエも黙っとけハゲ

549 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 14:02:07.49 ID:z1FVyjSJ.net]
>>536
お前もなー

550 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 14:18:05.90 ID:AoygmFYl.net]
ExcelのCellsの添え字が1オリジンだからデフォルトで使うしかない

551 名前:デフォルトの名無しさん [2018/03/11(日) 16:09:32.52 ID:auu5o0Ru.net]
>>535
cell番地が1から始まるからbaseも1じゃなきゃ書けないバカはレス禁止

552 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 16:12:01.55 ID:ULAXnW5C.net]
Cellsはコレクションオブジェクトを返すプロパティ関数だから、インデクサが1オリジンなのは文法上当たり前

553 名前:デフォルトの名無しさん [2018/03/11(日) 16:16:16.76 ID:auu5o0Ru.net]
>>540
配列の話してんだよバカチョン黙ってろや



554 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 16:36:25.15 ID:z1FVyjSJ.net]
>>539
誰にレスしてんだよ、ボケ w

>>540
アホすぎ、そんなもん仕様によるだろ

555 名前:デフォルトの名無しさん [2018/03/11(日) 17:04:17.63 ID:sEfAJdP7.net]
Excelが開発された当初はまだ0の発見前だったからだろ。
今作るなら0から始まるようになる。

556 名前:デフォルトの名無しさん [2018/03/11(日) 19:02:59.32 ID:lvju0XX+.net]
あーこれはスベったな

557 名前:素人 [2018/03/11(日) 22:39:56.16 ID:/xAIuEgQ.net]
こんばんは! おしえてください!
VBAでフリーフォームを書いたり、既にあるフリーフォームの頂点編集をしようとしています。
書く方は上手くいって、Shapes.BuildFreeformに、AddNodesコマンドで10点頂点を追加して、
楕円を書きました。

続いて、頂点の編集を行うべく、書かれたshapeのnodesや、Verticesで頂点情報を取得したら、
なぜか30点あります。ベジェ曲線で描かれた頂点の座標はもう残っていないのでしょうか??

558 名前:デフォルトの名無しさん [2018/03/15(木) 07:48:53.70 ID:O8Mn8lcP.net]
>>545
コード貼ればレス付くかも

559 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 15:42:57.45 ID:5WWUtLn7.net]
こんにちは。
VBA初心者です。
Excelで知恵袋のような社内用のQ&Aを作成中です。
質問フォームに入力すると質問が縦に書き込まれていくところまで作りました。
しかし回答を質問に対応させることができません。
回答は対象の質問の横に入力されていくように作りたいですが、どうしたらよろしいでしょうか。
教えて下さい。

分かりづらいかもしれませんが、下記のように作りたいです。

質問1 回答1 回答2 回答3…
質問2 回答2-1 回答2-2…
質問3

560 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 17:19:37.49 ID:S4dIExI6.net]
シートを別にする
質問ごとにIDを振って回答にその質問IDを保持させる

561 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 18:51:44.63 ID:S3aSBsrx.net]
いけそうです。ありがとうごさいました。

562 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 06:16:16.15 ID:5eP/vpMI.net]
htmlからidやnameに属さない、独自の名前を付けられた値を取得したいです。
<li id="result_1" result-rank="1" data-original="hoge">
<li id="result_2" result-rank="2" data-original="fuga">
・・・
<li id="result_123" result-rank="123" data-original="hage">

data-original="hoge"の「hoge」を取得したいです。
常にidのresult_1を取得したいわけではなく、またidの値も検索結果によっては変動します。
data-originalは必ずliタグの中にあります。
htmlは変更できません。

ウィザード級の方々何卒お力をお貸しくださいませ。m(_ _)m

563 名前:550 mailto:sage [2018/04/27(金) 04:34:25.39 ID:HRYENVs1.net]
自己解決しました。



564 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 17:39:47.51 ID:Ewgb7+aM.net]
ExcelVBAの質問です
adodbStreamを使って、jisコード(ISO-2022-JP)で書かれたテキストファイルを読み込んで色々するマクロを作っています
対象のテキストは1行120バイトのレコードが何行も含まれるという体裁になっているファイルです
このファイルを入力ファイルに指定したところ、なぜか3行目のみ最初の12バイト分が読み込まれません
レコードの内容を変えて何度か試してみたのですが、決まって3行目のみ行頭の12バイトが抜け落ちてしまいます
adodbを使う際に何か必要なことがあるのでしょうか?

565 名前:デフォルトの名無しさん [2018/04/27(金) 17:40:39.83 ID:Ewgb7+aM.net]
上げておきます

566 名前:デフォルトの名無しさん [2018/05/07(月) 00:53:53.60 ID:Zjii9/TV.net]
Webにあるスクリプト入れても動いたり動かなかったり
厳しいね、これは。

567 名前:デフォルトの名無しさん [2018/05/11(金) 11:32:55.94 ID:Vbz54Hwk.net]
ファミコンゲームを再現したいんですが、単純な構造のゲームってありますか?

568 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 12:17:07.84 ID:Pz/tQeeR.net]
シート1のA44:I44のセルの内容を、マクロでシート2の最後列に貼り付けていきたいです。
下記のマクロだと、シート1のA44のセルをシート2の最後列のAのセルにのみ、コピーするだけになってしまいます。
どう変更すればいいのか、よかったら教えて頂きたいです。
よろしくお願いします。

Sub テスト()
Dim LastRow As Long
With Worksheets("シート2")
LastRow = Worksheets("シート2").Range("A"&Rows.Count).End(xlUp).Row + 1
Range("A"&LastRow).Value=Worksheets("シート1").Range("A44:I44").Value
End With
End Sub

569 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 12:32:44.52 ID:p+/wpzED.net]
>>556
Resizeで貼り付ける範囲を広げてあげる
幅を9セルにしたいならResize(, 9)って付け足す

570 名前:デフォルトの名無しさん mailto:sage [2018/05/11(金) 15:54:14.26 ID:Pz/tQeeR.net]
>>557
できました!ありがとうございました!

571 名前:デフォルトの名無しさん [2018/05/23(水) 19:25:31.94 ID:Au5e7VGg.net]
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

HCSP8

572 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 10:45:12.88 ID:cPlRxlDn.net]
HCSP8

573 名前:デフォルトの名無しさん [2018/05/30(水) 16:34:41.89 ID:C5TotkC4.net]
VBAってリボンにメニューを作成出来る?



574 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 12:50:35.76 ID:TWLhtyG5.net]
できるよ

575 名前:デフォルトの名無しさん [2018/05/31(木) 22:00:54.69 ID:mTNxmz5w.net]
出来ないだろ

576 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 22:10:43.12 ID:tlOTml64.net]
シートにボタンがいくつかあって、押したときの処理が結構複雑なんです
とりあえずclickedをシートモジュールに書いて、そこから呼び出される関数も全部シートモジュールに書いたら分量がすごいことになりました
やっぱりクリック検出だけにしぼって残りは全部標準モジュールにすべきなんですかね。そのシートでしか呼び出されないわけで分けるのも分かりにくいような気もして

577 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 23:13:50.53 ID:eZ3BghFT.net]
>>563
Excel2003までのツールバーにメニュー追加するコードを書くと2007以降ではリボンにメニューが追加されるけど違う話かな?

578 名前:デフォルトの名無しさん mailto:sage [2018/07/02(月) 19:23:11.48 ID:kZ0RH16R.net]
Access2016でコンボボックスの規定値をnullから1へ変更したくて
フォーム!コンボボックス.DefaultValue = """1"""とするフォーム上は1と表示されるんだが、プロパティーシート上は全く変化なくて、フォームをとじてから開くと規定値が変わっていなくてNullのまま。
VBAからは既定値の変更が出来ないのかな?

579 名前:デフォルトの名無しさん mailto:sage [2018/07/04(水) 18:36:07.99 ID:uOrTSuCX.net]
フォームを閉じるときに変更を保存しなけりゃ普通に考えてもとに戻るわけだが

580 名前:デフォルトの名無しさん mailto:sage [2018/07/04(水) 19:06:38.06 ID:SBPTcvBw.net]
>>567
仰るとおりでした

581 名前:デフォルトの名無しさん [2018/07/04(水) 22:40:17.29 ID:gFgZc5FG.net]
5OK

582 名前:デフォルトの名無しさん mailto:sage [2018/07/06(金) 12:23:43.73 ID:uTPDH9XV.net]
5OK

583 名前:デフォルトの名無しさん mailto:sage [2018/07/26(木) 23:25:17.04 ID:10W3NzaF.net]
ここはjscriptはアカンけ?outlookをjsで弄りたいんだが



584 名前:デフォルトの名無しさん mailto:sage [2018/07/27(金) 11:07:24.57 ID:zSlylfXh.net]
Jscriptなら近いのはVBSじゃないか?

585 名前:デフォルトの名無しさん mailto:sage [2018/07/27(金) 11:15:30.85 ID:OAh4kN9K.net]
HTAとか

586 名前:デフォルトの名無しさん [2018/08/01(水) 19:27:32.96 ID:sloNm1e3.net]
Wordで読みとり専用推奨で保存されてるファイルをVBAで書き込み可で開いて編集して上書き保存したいんですが、やる方法はありますか?

587 名前:デフォルトの名無しさん mailto:sage [2018/08/01(水) 22:01:52.24 ID:oaZVWoyy.net]
読み取り専用推奨なんて属性ビットがあるのか?

588 名前:デフォルトの名無しさん mailto:sage [2018/08/01(水) 22:05:26.28 ID:oaZVWoyy.net]
マジだったカオスと思ったが
開くと読み取り専用か聞いてくるのか

まあ、OS側でなくワード側で制御してそうだから、回避は厳しそうな気がする

589 名前:デフォルトの名無しさん mailto:sage [2018/08/01(水) 22:15:26.91 ID:HUVD91D/.net]
カオス言いたい年頃なのでどうか大目に見てやって下さい

590 名前:デフォルトの名無しさん mailto:sage [2018/08/01(水) 22:18:30.88 ID:NozJFPGH.net]
カオスは天地が分かれる前の状態 あるいは光と闇が分かれる前の状態

591 名前:デフォルトの名無しさん mailto:sage [2018/08/01(水) 22:21:17.59 ID:6UiRsc0v.net]
カオスエンジェルで抜いた

592 名前:デフォルトの名無しさん mailto:sage [2018/08/02(木) 00:14:28.59 ID:isxfR7GW.net]
>>576
VBAを使わずにファイルを開いてダイアログのウィンドウをつかまえて「いいえ」ボタンにメッセージを送るという力技ぐらいしか方法はないんでしょうか?

Excelでは開くときにIgnoreReadOnlyRecommenedというのを指定すれば良さそうなんですが

593 名前:デフォルトの名無しさん mailto:sage [2018/08/02(木) 01:48:50.77 ID:I4e8JJGh.net]
document.openメソッドにも引数readonly があるみたいだけど



594 名前:デフォルトの名無しさん mailto:sage [2018/08/02(木) 08:52:11.65 ID:L3mOQQ2h.net]
>>581
ReadOnlyにFalseを渡しても読みとり専用で開かれるのは確認済みです

595 名前:デフォルトの名無しさん [2018/08/02(木) 12:49:47.07 ID:rM6odxjs.net]
>>574
ありません。
Wordは手動でやるしかない。
Excelとは違いますから。

596 名前:デフォルトの名無しさん mailto:sage [2018/08/02(木) 18:55:35.87 ID:kRv3+o5C.net]
>>580
VBAでもその力業で出来るけどね。
でも読み取り専用推奨で保存する目的はそのメッセージを出すことにあると思うからそれをスキップするコードを書くべきかという問題もある。

597 名前:デフォルトの名無しさん mailto:sage [2018/08/02(木) 19:38:51.82 ID:CFW8XzdE.net]
>>582
すくなくともうちの環境では、ReadOnly:=Falseで書き込み可能で開いてるけど?
その状態からReadOnlyRecommended = Falseにして保存したら、読み取り専用推奨は外れてるが

まあうちの環境がかなり古いから最近では出来ない可能性もあるが
それホントに推奨なだけなのか?

598 名前:デフォルトの名無しさん mailto:sage [2018/08/02(木) 20:14:42.01 ID:L3mOQQ2h.net]
>>585
試した環境はWord2010ですがここに書いてある通りです。できません。

https://support.microsoft.com/en-us/help/275976/word-document-opens-as-read-only-when-you-try-to-programmatically-open

599 名前:デフォルトの名無しさん mailto:sage [2018/08/02(木) 21:07:22.34 ID:CFW8XzdE.net]
>>586
じゃあ2010から出来なくなったんだな
うちの2007ではできてるから

ただそこの文書
Note The following example applies to Word 2003 and 2002:
とか書いてあるな
Last Updated: Apr 19, 2018
らしいけど、適用対象バージョンがよくわからんな

600 名前:デフォルトの名無しさん [2018/08/08(水) 01:24:38.39 ID:vu1bVHsA.net]
ACCESSでオートルックアップクエリを使用したフォームでマスタにないものを入力した際、
フィールドとキーが一致しているレコードをテーブルで探すことができません。
と出ますが、マスタにないデータを入力しようとしたとき、上のメッセージを出すことなく、マスタ登録用フォームを呼び出すにはどうすればよいでしょうか?教えていただけると助かります。

601 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 19:57:58.33 ID:I61xiysx.net]
スパークラインをVBAで挿入したいんだけど範囲指定のところがうまくいきません。
わかる方いたら教えてください。よろしくお願いします。

call cells(10 , h ).SparklineGroups.Add(xlSparkLine, "n5: n100")

"n5: n100" のところなのですが、 
range(worksheets(h).cells(14,5) , worksheets(h).cells(14 , G ))

のようにして ワークシートごとの数値群をスパークラインにしていきたいのですが、、、
何か良い方法を教えてください。
よろしくお願いします。

602 名前:デフォルトの名無しさん [2018/09/02(日) 12:36:29.88 ID:/2qGDDvp.net]
質問 
Outlook2010なのですが
受信トレイの検索(Ctrl+E)で「請求書」を検索するのと同じ動作を
VBAにしたいのですがどのように記述すればいいのでしょうか
ボタンに登録して使うつもりです。

OutlookVBAを使うのは初めてでしてお手引きをお願いいたします

603 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 16:03:58.04 ID:v7+8Ol2A.net]
VBAで質問です
【前提】
・デスクトップにフォルダA
・フォルダAの中に9月1日分のExcelファイル"0901"とマクロ作動用の.xlsmファイル

【したいこと】
・フォルダAの中に9月2日分のフォルダ"0902"を作成
・"0901"を開き、B2セルの2018/9/1を2018/9/2に書き換え
・フォルダ"0902"内にファイル名を"0902"にして保存 


日毎のレポートのひな形を作ろうとしています
あまり知らないながら書いてるのですがエラー出まくりで泣きそうです



604 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 16:16:35.28 ID:7fXcCHFS.net]
>>590
Application.Searchメソッド、もしくは
Application.Session.GetDefaultFolder(olFolderInbox).GetTable(DASLクエリの引数) を使えば良いのでは

605 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 16:51:32.22 ID:Q0JGCJ3q.net]
>>591
悪いこと言わないから、手でやるか詳しい人に頼みなさい
複数のブックが同時に開かれている状態でのVBA処理には
いろいろ面倒なところがあり、経験が必要
5ちゃんでサクっと説明できるものではない
しかもフォルダ処理も伴っているので、エラー処理を含め
きっちり作ろうとするとけっこうな規模のアプリになってしまうと思う

606 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 17:27:55.14 ID:1l6OdzeH.net]
>>591
thisworkbook.path\フォルダA\0901を開いてあとはブック名から指定して必要事項を書き換え。
ブック名を指定してsaveAsで
thisworkbook.path\フォルダA\0902で保存。


蛇足だが、必要無くともブックもシートも常に指定した方が良い。

607 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 17:44:00.59 ID:GR8jnF/5.net]
>>591
とりあえず作ったコードを晒せば色々添削してもらえるかと

>>593
回答できないなら黙ってなよ

608 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 18:16:50.42 ID:dkuRxOF+.net]
おそらくやりたいことはこんな感じだろう。
0901ファイルを開いた状態で、9月2日当日にレポートを作成する前提。
0901ファイルを修正するという話だったからその通りにしたけど、本当ならここはテンプレートファイルから書き起こすようにするべきだと思う。
テスト実行してないので、エラーが出たらごめんなさい。

Sub CreateDailyReport

Dim Report As Workbook
Set Report = Application.Workbooks("0901")
'テンプレートから新規ファイルを作成するなら以下のように変える
'Set Report = Application.Workbooks.Open(テンプレートのパス)

Report.Worksheets("Sheet1").Range("B2").Value = Format(Date, "yyyy/mm/dd")

Dim PathString As String
PathString = Thisworkbook.Path & "¥" & Format(Date, "mmdd")

If Dir(PathString, vbDirectory) = "" Then MkDir PathString

Report.SaveAs PathString & "¥" & Format(Date, "mmdd") & ".xlsx"

Report.Close

End Sub

609 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 18:17:42.72 ID:1ZQrBI0R.net]
593の言うことは間違ってないと思いますよ。

610 名前:デフォルトの名無しさん [2018/09/02(日) 21:02:04.61 ID:/2qGDDvp.net]
>>592
Application.AdvancedSearchして
Searchオブジェクトを検索フォルダーにSaveするっていうことですかね

単純にVBAでCrtl+Eのクイックサーチ(?)する方法があればと思ったのですが
無理っぽいですね
ありがとうございました

611 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 16:40:58.45 ID:KlP6yXrE.net]
初歩的な質問でごめんなさい
うまくできません

If IsNumeric(myN) Then
Range("A1").Value=Range("A1").Value + myN

End If

myNが1の時と2の時があるとしてセルA1の値を3にしたいのですが
やってみると12っていう風に数字が並んでいってしまいます
どうしたらいいでしょうか

612 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 19:12:55.41 ID:iNH/PWkM.net]
>>599
もしmyNがString型、あるいはObject型に文字列データが入っている場合は数値型に変換する必要がある
Range("A1").Value = Val(Range("A1").Value) + Val(myN)
でいいんじゃないかな

613 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 19:23:08.77 ID:KlP6yXrE.net]
>>600
String型になっていました
参考にしてもっと勉強します
お付き合いくださりありがとうございました



614 名前:デフォルトの名無しさん [2018/09/21(金) 21:15:16.71 ID:Fm9zyYJ3.net]
超初心者です。

Googleの検索窓に「VBA」と入力する サンプルコード
(https://vba-code.net/ie/set-value-to-textbox/) を実行してみましたが、
objIE.document.getElementById("gbqfq").Value = "VBA"のところで
「実行時エラー 424 オブジェクトが必要です。」となって動きません。

「標準モジュールに以下のコードを追加して」の意味が分からないので、
標準モジュールをどう書いたらよいのか、どこに追加したらよいのかわからず
サンプルコードのみを実行しました。

どなたか親切な方、対応方法を教えてください。
難しいことはわからないので具体的にコードを書いてもらえると嬉しいです。
よろしくお願いいたします。

615 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 22:26:39.22 ID:9i7TQATj.net]
>>602
>>objIE.document.getElementById("gbqfq").Value = "VBA"

objIE.Document.getElementById("lst-ib").Value = "VBA"

616 名前:デフォルトの名無しさん [2018/09/21(金) 22:40:18.36 ID:Fm9zyYJ3.net]
>>603
ありがとうございます!
できました!!!
なんか分からないけど動いて嬉しいです!
頑張ります。

617 名前:デフォルトの名無しさん [2018/09/21(金) 22:42:58.72 ID:MqKbhYRD.net]
>>604
おう頑張れ!わからんかったらまたいつでも聞いてくれな!

618 名前:デフォルトの名無しさん [2018/09/21(金) 23:16:58.27 ID:Fm9zyYJ3.net]
>>605
ありがとうございます!

同じことを別のホームページでしたくて、
URLと入力するところを変えてみたのですが、
実行時エラー438 オブジェクトはこの

619 名前:vロパティまたはメソッドをサポートしていませんとなって動きません。
ホームページは

https://www2.smile-etc.jp/NASApp/etcmlg/MlgReq;jsessionid=0001kXELRCuGax2mjI7VtXa12rz:15fqn57ku?gvlddpef=1011100000&mdwsetmb=1011120000の画面でしたくて、


入力するところは
objIE.document.getElementsByName("Name1Kana").Value = "マイレージ"としてみました。

お時間あるときでよいので出来たらお願いします。

仕事で毎日同じような入力ばかりしていて自動化できるところをできたらいいなと思っているのですが、超初心者にはハードルが高くて難しいです 涙

'
[]
[ここ壊れてます]

620 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 23:29:19.39 ID:m8DL5ZJ4.net]
getElementById("gbqfq")
getElementById("lst-ib")

君は、この違いがわからないの?
HTML, DOM, CSS, JavaScript とか知らないの?

VBA には関係ないのだけど。
全言語・プログラミングに共通の話題なんだが

621 名前:デフォルトの名無しさん [2018/09/21(金) 23:59:36.29 ID:Fm9zyYJ3.net]
>>607
すみません、わかりません。

622 名前:607 mailto:sage [2018/09/22(土) 01:01:33.83 ID:DCTpeoPT.net]
HTML に書いてある、ID だよ

ウェブページは、HTML(DOM), CSS, JavaScript で出来ている。
ブラウザでF12 を押すと、開発者ツールが起動するだろ

これらを知らないと、ウェブ開発はできない!

VBA とは、全く関係ない

623 名前:デフォルトの名無しさん [2018/09/22(土) 03:52:07.76 ID:AiTHsE5Z.net]
>>609
>>609
知識もないのに場違いな質問をしてしまいすみませんでした。ご親切にありがとうございました。



624 名前:デフォルトの名無しさん [2018/09/22(土) 09:42:45.32 ID:AiTHsE5Z.net]
>>606
自己解決して、自動入力マクロができました!ありがとうございました。

625 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 07:52:16.28 ID:OKfVsW46.net]
VBAでできることはC#でもやることはできますか?

626 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 07:55:38.55 ID:/wsNoZ03.net]
できます

627 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 09:20:25.16 ID:dGKqHjcm.net]
ユーザー定義関数の作成以外ならなんでもできます

628 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 09:54:55.01 ID:TjU2aakC.net]
それにしても、なんで、マクロはFunctionしかcall出来ないんだろうね。
無駄にFunctionを作らないようにと英語の本には書いてある。Subで済むもをFunctionにするなと書いてある。
なのに、マクロの仕様のために、無駄にFunctionをつくったり、SubをcallするだけのFunctionを作ったりしないといけないのは間抜けな仕様だと思うがどうだろうか?

629 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 10:38:39.78 ID:/wsNoZ03.net]
>>614
それもC#で可能

>>615
ちょっと何言ってるかわかんないですね

630 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 10:53:20.05 ID:TjU2aakC.net]
>>616
マクロからSubをCallできないのは知ってますか?

631 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 12:09:03.01 ID:bZOmvKy4.net]
>>617
知らないです
私の知ってるマクロだとsubもcallできるので

632 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 12:28:42.41 ID:YStpcFYj.net]
>>616
本当に?
ワークシートからDLL関数をCallするためのインターフェースだけはVBAネイティブのFunctionとして書かなきゃいけないと思ってた
ワークシートから直接C#ソースの関数をCall出来るってこと?

>>615
SubもCall出来る
というかSubは本来Subroutineのことを指すのでそもそもCallできなきゃおかしい

633 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 14:32:33.06 ID:E7u6qrbY.net]
あれ?エクセルは出来るの?
アクセスは駄目なんだよ



634 名前:デフォルトの名無しさん [2018/10/12(金) 17:15:46.40 ID:QO2uhWCP.net]
VBAしか使わない人間は、WinAPI使わない人間はSubしかCallしない。

635 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 17:26:32.07 ID:Vm21lImY.net]
VBAより日本語がおかしい

636 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 17:45:20.75 ID:TjU2aakC.net]
なんでAccessはマクロからSubを呼び出せない仕様なんだろうか?

637 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 17:45:47.46 ID:TjU2aakC.net]
つーか、ここはExcelのスレなのかな?

638 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 18:11:30.85 ID:Zsf/ZX4u.net]
Accessでも出来るぞ

639 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 18:20:18.57 ID:4bQjrfTH.net]
ほんとに?MSのサイトに対処方法が書いてあったけどなあ。
仕事で使ってたmdbでエラー出まくってSubをFunctionに書き換えた記憶があるけどなあ

640 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 18:45:46.09 ID:S2JrLclJ.net]
意味が分からん。
ExcelだろうがAccessだろうが当たり前にできる。
やり方間違えてるだけだろ。

lngRet = FuncA("何かの引数")
Call SubA("何かの引数", "何かの引数2")
これはできる。

SubでCallを省いた場合に
SubA("何かの引数1", "何かの引数2")
とするのは出来ない。

Callを省く場合は
SubA "何かの引数1", "何かの引数2"
とする。

641 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 19:05:34.79 ID:TjU2aakC.net]
>>627
AccessとExceの用語の違いが問題かもしれません。
Accessだとマクロのデザインビューで新しいアクションの実行→プロシジャーの実行を選択→プロシジャー名を指定という流れです。
ここでSubを入れるとエラーになり、Functionを入れると実行されます。
全く同じ動作でもSubだとエラーでFunctionだと実行されるという謎仕様のことです。

642 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 19:37:39.24 ID:aE6SgoRY.net]
同じように困ってる人がいました。
Subプロシージャをマクロで実行する方法を教えてください
webcache.googleusercontent.com/search?q=cache:PplL--43vEQJ:www.accessclub.jp/bbs3/0178/superbeg59084.html+&cd=5&hl=ja&ct=clnk&gl=jp&client=firefox-b-ab

Calling Sub from Macro
https://www.pcreview.co.uk/threads/calling-sub-from-macro.3966923/

643 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 19:39:49.69 ID:wk7eAlWy.net]
>>628
Accessマクロの「プロシージャの実行」機能は、Functionプロシージャに限ってアプリ経由でコールバックさせることができるっていう一種のリフレクション機能だから、仕様上Subプロシージャを呼べないのは当たり前

でも普通はVBAその他一般のプログラミング言語の話題でCallするとかコードを呼び出すとか言う場合、プログラムのコード中で他のプロシージャ(=メソッド)を呼び出すこと一般を指す
AccessだろうがCallステートメントでSubを呼べないわけがない

全然話してる内容が違う



644 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 19:42:56.49 ID:4ERZBcjn.net]
MSの提示する対処方法
https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/runcode-macro-actionから抜粋
>>[!ヒント] Visual Basic で記述した Sub プロシージャまたはイベント プロシージャを実行するには、Sub プロシージャまたはイベント プロシージャを呼び出す Function プロシージャを作成します。
>>その後、 RunCode アクションを使用して、Function プロシージャを実行します。

645 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 19:47:22.51 ID:4ERZBcjn.net]
>>630
そうなんですか?Callという言葉の使い方が悪かったのですね。
Accessのマクロのプロシジャーの実行からSubを実行できないという表現が適切なんですね。
それにしても謎仕様ですね。いちいちCall_SubみたいなFunctionを作らないといけないなんて馬鹿らしいですよね。
Subを使うのを止めて戻り値を使わないのになんでもかんでもFunctionにしている人がいるのはこのあたりにも原因があるのでしょうかね。。。

646 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 20:06:27.08 ID:a+EZTAPW.net]
C#やJavaなどの言語にはfunction相当の構文しか存在しないから、それに合わせてるだけかも

647 名前:デフォルトの名無しさん mailto:Sage [2018/10/12(金) 20:12:42.89 ID:Vm21lImY.net]
サブルーチンというものは、マクロ上での繰り返し処理や重複処理が必要な場合に同じコードを何度も記載することを回避して、プログラムの再利用性と

648 名前:ネ潔性とメンテナンス性を高めるためのもので一種の共通部品で呼び出して使えるためとても便利。
その代わり呼び出し側のコードが必ず必要。
[]
[ここ壊れてます]

649 名前:デフォルトの名無しさん mailto:Sage [2018/10/12(金) 20:15:04.20 ID:Vm21lImY.net]
よってユーザー定義関数とは自ずと目的が違う。

650 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 20:43:31.86 ID:xhA4Quty.net]
たとえ1回しか使わなくても、機能ごとに分けて名前を付けることでコードの見通しを良くするという目的もある

651 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 23:37:21.09 ID:CecLyO81.net]
どーでもいいわそーゆーおまえのこだわりw

652 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 23:40:27.93 ID:kwtsHVW5.net]
・Accessのマクロの「プロシージャの実行」機能は要するに「関数を実行する」ことに重きを置いている機能なので、関数ではないSubプロシージャは呼び出せない。
・「呼び出す」と「Callする」は意味が(あるいは受け取り方が)違うので下手に知ったかぶりしないこと。

653 名前:デフォルトの名無しさん mailto:sage [2018/10/12(金) 23:43:28.15 ID:CecLyO81.net]
アクセスさんの気持ちを代弁するやつw



654 名前:デフォルトの名無しさん mailto:sage [2018/10/13(土) 14:18:57.90 ID:7+viDhhJ.net]
>>638
関数という言葉の定義次第ではSub Procedureも関数の一種になるぞ

あと、Accessマクロの実行機能に関する話題でマクロピッカーからプロシージャを直接選択して実行する操作を指して「呼び出す」とか「Callする」と表現する例は比較的稀だと思うぞ

655 名前:デフォルトの名無しさん mailto:sage [2018/10/13(土) 18:29:35.77 ID:hGe/e45K.net]
数学的な定義だと関数は一対一の写像だから戻り値がないものは関数ではなくなってしまう
丸投げアウトソーシングとでも言えばいいのか

656 名前:デフォルトの名無しさん mailto:sage [2018/10/14(日) 01:16:47.10 ID:FNEdXER5.net]
>>641
その理屈だと、Function Procedureが戻り値なしの記述を許容していること、戻り値と全く論理的な二項関係がない処理をFunction Procedureの中に書けてしまうことを考えた場合、Function Procedureが果たして関数と言えるのかどうかということの方が怪しくなる

657 名前:デフォルトの名無しさん mailto:sage [2018/10/14(日) 18:45:30.05 ID:+nd0Ta/b.net]
それはプロパティとメソッドについても言えるわけで。
意味合いから使い分ければ良い。

Accessの仕事してるけどいわゆるAccessのマクロ機能は嫌いなので殆ど触ったことないな。

658 名前:デフォルトの名無しさん mailto:sage [2018/10/15(月) 00:09:25.20 ID:bvVmxQGC.net]
>>640
マクロからVBAプロシジャを実行するのを、呼び出すと言うのはすごく一般的だとおもうが
むしろ呼び出す以外にどう言うんだ

>>642
戻り値を指定しないFunctionだって戻り値はちゃんとあるんだが
まあそもそもプログラミング上でいう関数は数学的定義の関数ではないんだがな

>>643
一般的なプログラム用語としてはそうかもしれんが
VBAや旧VB,VB.NET,C#なんかはプロパティはメソッドとは別な構文で定義されてる
VBAの話するならちゃんと区別しれ

659 名前:デフォルトの名無しさん mailto:sage [2018/11/14(水) 18:28:17.85 ID:yWBiOXbZ.net]
vba初心者でわからないところがあって質問したいんですけど、ここで大丈夫ですか?

660 名前:デフォルトの名無しさん mailto:sage [2018/11/14(水) 18:50:01.08 ID:JBsUV7Ak.net]
ExcelとAccessは専門スレが別にあるけどな

661 名前:デフォルトの名無しさん mailto:sage [2018/11/14(水) 19:18:54.83 ID:yWBiOXbZ.net]
学校の課題なんですがさっぱり分かりません
コードの入力?を教えてほしいです
https://i.imgur.com/F4T8tlt.jpg
https://i.imgur.com/3L2Gjq0.jpg

662 名前:デフォルトの名無しさん mailto:sage [2018/11/14(水) 19:27:08.71 ID:yRk1YRk6.net]
>>647
その宿題をやるには「フォームの作成」という作業が必要で、それは文章だけの掲示板じゃとても説明できない

663 名前:デフォルトの名無しさん mailto:sage [2018/11/14(水) 19:33:23.32 ID:JBsUV7Ak.net]
二次方程式 VBAのキーワードでぐぐればそれなりに情報はあるよ



664 名前:デフォルトの名無しさん mailto:sage [2018/11/14(水) 20:36:22.41 ID:yWBiOXbZ.net]
>>648
フォームの作成ってこれですか?
ここしかわかんなかったです…
https://i.imgur.com/74SP9RE.jpg

665 名前:デフォルトの名無しさん mailto:sage [2018/11/14(水) 20:37:40.54 ID:yWBiOXbZ.net]
>>649
調べてみます
ありがとうございます

666 名前:デフォルトの名無しさん mailto:sage [2018/11/14(水) 22:42:46.78 ID:iSnTRpeY.net]
学校でExcelの課題出るのか
全員Excel入りのWindows機もってる前提なのか

667 名前:デフォルトの名無しさん mailto:sage [2018/11/14(水) 22:53:14.87 ID:JBsUV7Ak.net]
商業科高校と大学生は皆持たされる時代やね

668 名前:デフォルトの名無しさん [2018/11/15(木) 12:24:37.27 ID:yIPB3Fsn.net]
なきゃ学校にあるPC使うだけやんけ
変な事気にする奴やな

669 名前:デフォルトの名無しさん mailto:sage [2018/11/15(木) 14:25:13.91 ID:njFgw0Uw.net]
>>653
商業科の電卓名人みないな奴は、もぅおらんのか

670 名前:デフォルトの名無しさん mailto:sage [2018/11/15(木) 23:21:50.05 ID:XqpfGkJo.net]
VBAで3つ数値があった時、最大値を表示させたい時
下記URLのNo.4の回答のelseifを使ったものがありますが、
elseifを使わずにelseだけで表示しようとすると、
どのようになるのでしょうか?
宜しくお願いします

ttps://oshiete.goo.ne.jp/qa/5352661.html

671 名前:デフォルトの名無しさん mailto:sage [2018/11/15(木) 23:28:15.36 ID:XqpfGkJo.net]
分かりづらそうなので追記で、下記のところです。
宜しくお願いします 
  a = 10
  b = 200
  c = 30

  Max = a

  If b > Max Then
    Max = b
  ElseIf c > Max Then
    Max = c
  End If

672 名前:デフォルトの名無しさん mailto:sage [2018/11/15(木) 23:37:03.06 ID:dI+Dsxy9.net]
Max = a
If b > Max Then
  Max = b
Else
  If c > Max Then Max = c
End If

673 名前:デフォルトの名無しさん mailto:sage [2018/11/16(金) 06:18:18.01 ID:biDBAQdb.net]
>>658
ありがとうございます
試してみたいと思います



674 名前:デフォルトの名無しさん mailto:sage [2018/11/16(金) 06:57:12.53 ID:fQoG7lNZ.net]
そもそも657では最大値求められないだろ。
なぜ他の2つと比較してから決めないのか

675 名前:デフォルトの名無しさん mailto:sage [2018/11/16(金) 07:24:20.18 ID:biDBAQdb.net]
すいません、まだ初心者でまだ理解が追いついていなくて
とりあえず最大値求めるにはこういう形...とかで覚えようとしてて....頑張ります

676 名前:デフォルトの名無しさん mailto:sage [2018/11/16(金) 07:30:47.41 ID:1oL4uemZ.net]
658でも最大値は求められない
試しに
a = 1
b = 2
c = 3
で試してみるといい。Maxが2になってしまう

Ifだけでやる場合の正解の一例
Max = a
If b > Max Then Max = b
If c > Max Then Max = c

677 名前:デフォルトの名無しさん mailto:sage [2018/11/16(金) 07:35:16.96 ID:1oL4uemZ.net]
>>661
If Elseの構文は、最初のIfの条件が成立したらElse以降は処理されずEnd Ifまで飛ばされる
つまり、
a = 1
b = 2
c = 3
だった場合、
b > Maxが成立したらc > Maxの部分は飛ばされてしまうからMaxは2のまま終わってしまう

678 名前:デフォルトの名無しさん mailto:sage [2018/11/16(金) 07:44:30.26 ID:fQoG7lNZ.net]
elseやelseifは先行条件でTrueにならない場合にしか実施されない仕組みなことを理解しましょう

679 名前:デフォルトの名無しさん mailto:sage [2018/11/16(金) 08:11:14.61 ID:nU0jfNiC.net]
>>661
このレベルを形で覚えようとしている貴方にプログラミングは向いてない

680 名前:デフォルトの名無しさん mailto:sage [2018/11/16(金) 09:26:27.62 ID:RKO+v0zL.net]
ID変ったかも知れませんが>>656です
皆さんありがとうございます

>>665
手痛いレスですが、出来るところまで頑張ろうと思います。プログラマーではないですが基本は覚えないと連携し辛い位置の役職のため頑張ります。

681 名前:デフォルトの名無しさん mailto:sage [2018/11/16(金) 09:39:56.01 ID:fQoG7lNZ.net]
本当のプログラミング初学者なら仕方ない。制御構文なんてどの言語も似てるので、1つ覚えれば次は勘が効くようになるよ、長い目でがんばりなされ

682 名前:デフォルトの名無しさん mailto:sage [2018/11/17(土) 01:11:45.44 ID:A0ACnair.net]
最大値を求めたいならWorkSheetFunction.MAX使えば良いんじゃね?

683 名前:デフォルトの名無しさん mailto:sage [2018/11/17(土) 12:08:31.57 ID:vo1go4s2.net]
自民党ですらエクセル操作ミスるくらいだからな



684 名前:デフォルトの名無しさん mailto:sage [2018/11/17(土) 12:09:52.07 ID:vo1go4s2.net]
税金の計算もおかしくね?って思う

685 名前:デフォルトの名無しさん [2018/12/16(日) 00:58:32.35 ID:SwJ6GlUb.net]
>>668


686 名前:にわに []
[ここ壊れてます]

687 名前:デフォルトの名無しさん [2018/12/16(日) 01:01:16.65 ID:SwJ6GlUb.net]
パニックを、5人がかりでやれば楽勝だろ、とか言ってるようなもの。

688 名前:デフォルトの名無しさん mailto:sage [2018/12/17(月) 09:39:23.91 ID:5sE/cfMN.net]
エクセルVBAじゃなかったらどうするの

689 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 22:55:12.06 ID:A6rQVaax.net]
確かに。
エクセロかも知れないもんな。

690 名前:デフォルトの名無しさん [2018/12/26(水) 21:53:30.63 ID:KrpjpPkw.net]
VBA初心者です。少し長くなってしまいますが質問です。
・やりたいこと
1:現マクロ有効ブックのsheet1にフォームボタン設置する。
2:押すとC:\Users\Public\動物まとめ.xlsx をバックグラウンドで開き、その中のシート名"カピバラ情報"の E列4行目から5行目6行目...と、空白が来るまでの情報を取得しする。
3:現マクロ有効ブックに新しくsheet2を作り、その新シートのA1からA2A3...に取得した情報を書き込む。

現在のマクロは下記ですが上手くいかないです。
Option Explicit
Sub practice()
Dim i As Long
    i = 4
Dim fullPass As String
'セルのB3に C:\Users\Public\動物まとめ.xlsxと記述
fullPass = Range("B3")

Dim wb As Workbook
Dim Anothersheet As Worksheet

Workbooks.Open fullPass
Set Anothersheet = wb.Worksheets("カピバラ情報")
Sheets.Add After:=ActiveSheet
Range("A1").Select

Do While Cells(5, i).Value <> ""
 i = i + 1
Loop
Call wb.Close
End Sub

上手く情報を取得できないのでアドバイスお願いします。

691 名前:デフォルトの名無しさん mailto:sage [2018/12/27(木) 00:53:04.14 ID:coxr7jtk.net]
>>675
wbに何も代入されてない。
AnotherSheetへの代入もこけるはず。
AnotherSheetが正しく生成されたとしても、その後使用されていないから何かとってこれるはずがない。

692 名前:デフォルトの名無しさん mailto:sage [2018/12/27(木) 00:55:19.50 ID:coxr7jtk.net]
>>675
fullpass じゃなくて、fullpath ね。

693 名前:デフォルトの名無しさん mailto:sage [2018/12/27(木) 01:02:39.75 ID:coxr7jtk.net]
>>675
行列指定が逆?
5行目を右方向に評価してくような感じになってるけど、新規に作ったシートが対象になってるから、一周もループしてないよね?



694 名前:デフォルトの名無しさん mailto:sage [2018/12/27(木) 01:09:08.59 ID:coxr7jtk.net]
>>675
Cell値を取るときは、デフォルトにまかせずちゃんとプロパティ指定しよう。

695 名前:デフォルトの名無しさん mailto:sage [2018/12/27(木) 01:16:51.54 ID:coxr7jtk.net]
>>675
バックで開いたつもりのブックに新規シート作っちゃってない?
ブックのフォーカスを制御するとか必要かも。

696 名前:デフォルトの名無しさん mailto:sage [2018/12/27(木) 09:18:35.23 ID:psUgzr4+.net]
ID変わりましたが>>675です。

>>676>>680
遅い時間帯でありながら見てくださって
ありがとうございます。

色々と不十分だったのですね。
指摘箇所を直したりして
また報告しようと思います。

697 名前:デフォルトの名無しさん mailto:sage [2018/12/27(木) 09:19:34.30 ID:lhYnw8ev.net]
>>675
最初に注意すべきなのは、いきなりRangeやCellsは絶対に使うべきじゃないってこと。
ちゃんと省略せずにWorkbookやWorksheetから書くようにする。
しかしそれだとコ―ドが長くなるのでそのために今回のコードのように変数で受けるかWith文を使う。

以下はスマホ上で書いてるんで動くかは不明です。

698 名前:デフォルトの名無しさん mailto:sage [2018/12/27(木) 09:20:24.73 ID:lhYnw8ev.net]
Option Explicit
Sub practice()
Dim i As Long
Dim fullPath As String
Dim wb As Workbook
'Anothersheetじゃ分かりにくいんでopnShtに変更。
Dim opnSht As Worksheet
'追加シートは変数に受けないの?
Dim addSht As Worksheet

'セルのB3てどこ?
'多分ボタンのあるシートかなと推測。
fullPass = Thisworkbook.Worksheets("Sheet1").Range("B3").Value

'B3に出鱈目書いて動かしたらどうなるんだろう?
Set wb = Workbooks.Open(fullPath)
Set opnSht = wb.Worksheets("カピバラ情報")
With Thisworkbook
Set addSht = .WorkSheets.Add( After:=.WorkSheets("Sheet1"))
End With

'Range("A1").Selectって何の為に有るの?

'iの初期値を一番最初に書いてたけど、初めて見たとき何だか分からんかった。
'使う直前に関連処理と一緒にまとめた方が分かり易いよね。
i=4
Do While opnSht.Cells(5, i).Value <> ""
 i = i + 1
Loop
'元のCall wb.Closeなどという書き方をしたことが無いのでいつもの自分の書き方に変更。
wb.Close False
End Sub

699 名前:デフォルトの名無しさん mailto:sage [2018/12/27(木) 09:22:53.65 ID:lhYnw8ev.net]
>>680
フォーカスを制御すべきじゃない。
いきなりRangeやCellsを使うから上手くいかないのであって、きちんとブックやシートから書けばフォーカスを制御しなければならないことは滅多に無い。

700 名前:デフォルトの名無しさん mailto:sage [2018/12/27(木) 09:26:03.58 ID:lhYnw8ev.net]
早速間違いだ。
fullPassと書いてる所が一ヶ所ある。
fullPathに直しておいてね。

701 名前:デフォルトの名無しさん mailto:sage [2018/12/27(木) 11:21:46.87 ID:coxr7jtk.net]
>>684
まぁ、そうかもね。
でも最初はいろいろ試してもいいんじゃない?

702 名前:デフォルトの名無しさん mailto:sage [2018/12/27(木) 11:57:21.88 ID:psUgzr4+.net]
>>682‐685
ありがとうございます
深夜のご指摘から>>685まで参考にしていて

現在デバッグしてますが、“カピバラ種類”のシートが上手く取得できていないようです。
ちなみに
'セルのB3てどこ?
'多分ボタンのあるシートかなと推測。
その通りです、分かりづらくてすいません。

改行制限のためいくつかコメントは掲示板に書き込むとき省いてしまいました。

'Range("A1").Selectって何の為に有るの?
ですが 、新シートのA1から書き込む為に書きましたが、デフォルトでA1から書き込むみたいですので
無駄なマクロでしたね。

703 名前:デフォルトの名無しさん mailto:sage [2018/12/27(木) 12:23:02.37 ID:psUgzr4+.net]
少し言葉足らずでした。
iのカウント(空白行までループ)は上手く出来ているので、現マクロ有効ブックの新シートに取得情報を
書き込めていないようです。



704 名前:デフォルトの名無しさん mailto:sage [2018/12/27(木) 12:57:12.54 ID:lhYnw8ev.net]
>>688
うん?
Do〜Loopの中はiのカウントアップしてるだけなので、あなたが省略した(と勝手に思ってるんだけど)コードが動いていないということ?

念のためにいうと、元々のコードには情報を取得するコードが全く無いからこのコードだけじゃ取り込めないのは当たり前だよね。

705 名前:デフォルトの名無しさん mailto:sage [2018/12/27(木) 13:47:48.84 ID:psUgzr4+.net]
すいません、
不覚に気づき、
dim j as long
j = 1
を追加し、ループを
Do While opnSht.Cells(5, i).Value <> ""
addSht.cells(j,1) = opnSht.Cells(i, 5)
j = i
 i = i + 1
Loop
にして上手くいきました、ありがとうございます。

706 名前:デフォルトの名無しさん mailto:sage [2018/12/27(木) 13:57:20.08 ID:psUgzr4+.net]
細かい修正として
j = i
i = i + 1
の部分も
i = i + 1
j = i - ○
のようにして、
無駄にできてしまう空白もなくしました。

お付き合いしてくださった方、
ありがとうございました。

707 名前:デフォルトの名無しさん mailto:sage [2019/01/03(木) 04:15:42.29 ID:aAVkqECP.net]
質問です
ワークシート上にすでに引かれている複雑な枠線をコードとしてどうにか変換というか取得できる方法はないでしょうか…

708 名前:デフォルトの名無しさん mailto:sage [2019/01/03(木) 04:35:53.91 ID:Em9anKIf.net]
>>692
描くのの逆をするだけじゃ?

709 名前:デフォルトの名無しさん mailto:sage [2019/01/03(木) 13:29:44.69 ID:aAVkqECP.net]
>>693
返事ありがとうございます
すみません、私の頭では理解できません…よかったらもう少し詳しく教えてもらえませんか

710 名前:デフォルトの名無しさん mailto:sage [2019/01/03(木) 14:57:12.35 ID:9QrYctZ6.net]
何をしたいのか書いてよ
罫線の設定状況を知りたいだけならRange.Borders見なよとしか言えないし
https://docs.microsoft.com/ja-jp/office/vba/api/excel.range.borders

711 名前:デフォルトの名無しさん mailto:sage [2019/01/03(木) 15:15:01.64 ID:Em9anKIf.net]
>>694
罫線を描く動作は理解できてる?
マクロ記録で簡単に調べられますよ。
例えば、2行2列選んで、縦横斜め全てに実線入れて
記録されたものを見ればどのような構造で描かれているのか
分かります。
記録の際は、xl〜の定数でよいですが、取得の際は数値で
返ってくるので注意。
調べたければオブジェクトブラウザで調べてもよいですが、
イミディエイトで、?xlThin みたいに簡単に確認する方法も
あります。
でも、取得して使うなら数値のままでもOKです。
ここまではOK?

712 名前:デフォルトの名無しさん mailto:sage [2019/01/03(木) 16:26:50.99 ID:+aY40et6.net]
>>695
>>696
会社でとある先人の作ったエクセルのフォーマットがあるのですが、それを使って作業するおばあちゃんが度々壊してしまうのです
セル結合やセルの幅など複雑になっている物なので、壊してしまったパソコンの不得意なおばあちゃんはいつも四苦八苦していて、どうにか入力された数値以外の罫線や列幅などだけボタン1つ簡単に戻せるものを作ってあげたいと考えています

頂いたヒントを元にもう少し頑張ってみます
結局わからなければまた質問させてください
ありがとうございました

713 名前:デフォルトの名無しさん mailto:sage [2019/01/03(木) 16:38:04.35 ID:CdG5H8Qg.net]
>>697
シートの保護じゃダメなの?
おばあちゃんには特定セルに数値入力させてるだけなんでしょ?



714 名前:デフォルトの名無しさん mailto:sage [2019/01/03(木) 17:30:36.94 ID:Em9anKIf.net]
>>697
シート保護で十分みたいですね。
もし何らかの理由で保護できないのであれば、
同フォーマットの隠しシートから書式貼り付けした方が早そう。
セル結合もあるし、1セルずつ罫線情報取得とか効率悪すぎ。

715 名前:デフォルトの名無しさん mailto:sage [2019/01/03(木) 22:01:21.27 ID:aAVkqECP.net]
>>698
>>699
それがわかりながらあらゆる所(不規則)を動かさないといけない時があったりで、保護だと都合が悪かったんです
フォーマット自体を大幅に変更できればもっと色々と簡単にできるのですが、それも他のおばあちゃんたちが前の方が良かった〜なんて必ず言うので見た目を崩すことはできません
担当のおばあちゃんorおばさんが変われば書式貼り付けのための範囲選択も上手くできないだろうから(全選択など知りません)また誰かが黙って長時間四苦八苦する事になってしまいます
無駄にすべて最初からやろうとしたりも平気であります
平均年齢49才の職場なので仕方ないんです
誰にも聞かずに戻したい部分を戻せるような、とーーってもわかりやすい説明付きのボタンをユーザーフォーム上にでもいくつか作ってあげたいと思っています
崩してしまうパターンはだいたい把握できているので、それが最善かなと…

716 名前:デフォルトの名無しさん mailto:sage [2019/01/04(金) 02:06:01.37 ID:+nkelZ7z.net]
>>700
いや、だから隠しシートから自動的に書式修復をかければという意味で言うたのですが、、
トリガーはファイルオープンでも、ボタンでも。

試しにやってみたけど、罫線やセル結合は問題なく修復できるみたい。
入力規則とかは引き継げないみたいなので別にケアする必要があるかも。
行挿入、列挿入とかされて座標がかわるようなことされないならこれで十分では?

自分がよくやるのは、表のエリア毎に範囲名をつけて、そのエリア単位で最初に表組みした
ときと同じ要領で表作成を記録していき、コードを整理して修復マクロにします。
これなら起点となるセルが壊されなければ行挿入、列挿入にもある程度柔軟に対応
できるし、式や入力規則の修復も追加できる。
まぁ、利用者は作成者の想定を軽く超えてきますけどね。

717 名前:デフォルトの名無しさん mailto:sage [2019/01/04(金) 08:59:12.57 ID:jYRqvj54.net]
>>701


718 名前:理解力なくてすみません、、、
そしてありがとうございます
そのやり方を取り入れてとりあえず一度作ってみます!
[]
[ここ壊れてます]

719 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 20:28:43.04 ID:gUifgf+0.net]
ディム a アズ インテジャー
コンスト b アズ バリアント = ファルス

この読み方はあってますか?

720 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 20:32:43.51 ID:b1memYXI.net]
さいごフォルス

721 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 08:43:51.62 ID:KJwN8fo6.net]
マジか!
自信なくなってきたわ。
フォー イーチ 〇 イン、スターコンブ、ブイビーナロウ、コンカット、
ナンバーフォーマットローカル、ドゥ ホワイル、イズナメリック、
デカー ファンクション セットウインドウロング リブ "ユーザー32" エリアス、
バイバル 〇 アズ ブーラン、アプリケーション.ハウンド、オプション エクスプリシト。

722 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 09:19:09.77 ID:1t0h4eLG.net]
numeric ニューメリック
alias エイリアス
boolean ブーリアン

723 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 09:40:31.66 ID:brNktcWU.net]
ディクレィア



724 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 12:50:34.64 ID:gJkAP+bh.net]
ぶーりーんっておもってた

725 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 14:02:45.95 ID:1t0h4eLG.net]
「デカー」ってなんのことだ?

726 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 06:06:27.68 ID:FqoKwBp9.net]
ぶーりん ってよんでた

727 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 06:58:21.81 ID:NbFzEAOW.net]
>>709
>>707が言う通りDeclareじゃね?

728 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 08:09:02.73 ID:jhC9vbHJ.net]
declare デクレア(デクレアー)

発音記号を見るとディクレィアーなんだけど、音声ではディよりデに近く聞こえる
https://en.hatsuon.info/word/declare

729 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 14:53:02.35 ID:SqTYfLos.net]
バイバリュー

730 名前:デフォルトの名無しさん [2019/01/31(木) 16:04:06.71 ID:f4/Ws+Wz.net]
パワポでExcelのVBAにある
Application.OnUndo
みたいなことって出来ない?

731 名前:デフォルトの名無しさん mailto:sage [2019/01/31(木) 23:51:12.55 ID:eWv6zdmK.net]
Application.CommandBars.ExecuteMso "Undo"

732 名前:デフォルトの名無しさん mailto:sage [2019/02/01(金) 00:00:16.48 ID:BWIWaKpf.net]
undoをフックできるか?って質問の気がするが

733 名前:デフォルトの名無しさん [2019/02/01(金) 15:41:12.07 ID:lbEDOgk3.net]
>>716
そっちだね
あるいはパワポの内部変数(たとえば図形のRGB値とか)の変化を検知してイベント上げるとかでもいいんだけども



734 名前:デフォルトの名無しさん mailto:sage [2019/02/01(金) 19:24:08.72 ID:69So7CMb.net]
質問スレでいつも思うんだけど、どんな状況でそれが必要なの?
Excelで出来るんなら、逆にExcelをパワポっぽく見せるという手もあるんじゃないの?

735 名前:デフォルトの名無しさん [2019/02/02(土) 00:14:40.30 ID:hkITps2T.net]
勉強もかねてパワポのアドイン作ってるのよ
だからExcelじゃなくてパワポで出来なきゃ意味がない
その機能自体が必須で欲しい訳ではないから出来ないなら出来ないで諦める

736 名前:デフォルトの名無しさん mailto:sage [2019/02/08(金) 13:11:59.73 ID:WrxcLohJ.net]
何か斬新な使い方って無い?
ワードでファミコンみたいな。

737 名前:デフォルトの名無しさん mailto:sage [2019/02/09(土) 00:13:31.38 ID:nXE2v5Lv.net]
Functionで値を返すのと、ByRefで返すの、どう使い分けたらいいのか、わからなくなってきた。
どっちでも返せる状況なら、どっちがいい?

738 名前:デフォルトの名無しさん mailto:sage [2019/02/09(土) 00:37:08.95 ID:gPze9fmT.net]
他人とか将来の自分が読みやすいようにFunctionで

739 名前:デフォルトの名無しさん mailto:sage [2019/02/09(土) 00:41:30.67 ID:ThSbhyi3.net]
処理によるとしか

740 名前:デフォルトの名無しさん mailto:sage [2019/02/09(土) 04:25:25.62 ID:6oInKB58.net]
Function一択

ByRefは古い書き方で互換性のために残してる
これから作るプログラムには使うべきじゃない

741 名前:デフォルトの名無しさん mailto:sage [2019/02/09(土) 09:13:25.95 ID:NnmcfWng.net]
>>721
どちらでもいい状況ならFunctionの方が使い易いのでFunctionにした方がいい
あと>>724はアホだからスルーで

742 名前:デフォルトの名無しさん mailto:sage [2019/02/09(土) 09:25:22.06 ID:ThSbhyi3.net]
ByRefが互換性維持のために存在するという話は聞いたことがないぞ

743 名前:デフォルトの名無しさん mailto:sage [2019/02/27(水) 18:52:45.21 ID:0gstYK5t.net]
sortのcustomorderって、セル値を入れられたりはするのでしょうか?
複数のセル値を優先順位としてデータを並び替えるマクロを作成したのですが動作が遅いので改善出来ればと考えています。(forとifで判定する手法をとっています)
よろしくお願いします



744 名前:デフォルトの名無しさん mailto:sage [2019/03/02(土) 08:39:42.60 ID:PK2Geudt.net]
標準のソート機能で出来ないことでもやるの?
駄目ならSQL使うとか。

745 名前:デフォルトの名無しさん [2019/03/19(火) 09:29:22.78 ID:3/8oXV0g.net]
VBAがどっとNet対応
キターーーー!

746 名前:デフォルトの名無しさん mailto:sage [2019/03/19(火) 10:26:45.09 ID:NT4YoXBH.net]
Select from…
懐かしいな

747 名前:デフォルトの名無しさん mailto:sage [2019/03/19(火) 11:16:03.50 ID:7F9Wq7Fv.net]
>>729


748 名前:デフォルトの名無しさん mailto:sage [2019/03/19(火) 22:45:44.06 ID:i2FNQUrb.net]
さて、名前付き範囲ってVBA@Excelで使えないんだろうか。
もし使えたとして、実行時間はどうなのだろうか。
色々と謎が多い。

749 名前:デフォルトの名無しさん mailto:sage [2019/03/19(火) 23:22:30.00 ID:/asoePaH.net]
>>732
それ使うと後でエラー見つけるのめんんどくさくなる

750 名前:デフォルトの名無しさん mailto:sage [2019/03/20(水) 00:38:39.23 ID:vmDq6MjZ.net]
>>732
使えるよ
Application.Namesでコレクション取得して名前つき範囲にアクセスできるし、シートのRangeプロパティの引数ラベルとして名前をそのまま使ってセル取得できる

751 名前:デフォルトの名無しさん [2019/03/20(水) 16:11:53.05 ID:VkiUMgxP.net]
>>733
横からだけど、どう面倒になるの?

752 名前:デフォルトの名無しさん mailto:sage [2019/03/20(水) 19:48:02.99 ID:lxQ2zmLg.net]
>>735
セルの編集したときに壊れてた

753 名前:デフォルトの名無しさん mailto:sage [2019/03/20(水) 21:06:17.96 ID:ad3N4bFR.net]
名前をキーにして名前付き範囲にアクセスするときはリスト形式になってるNamesコレクションの要素に対して正規表現か何かで逐次マッチ検索してるはずだから、名前付き範囲が増えれば増えるほどアクセスが遅くなる



754 名前:デフォルトの名無しさん mailto:sage [2019/03/21(木) 01:35:24.94 ID:XMapNPTs.net]
なんで正規表現?
完全一致でいいじゃろ?
SortedListなら量に正比例して増えることはない

755 名前:デフォルトの名無しさん mailto:sage [2019/03/21(木) 07:27:32.08 ID:u3u8nbsq.net]
>>736
それおま環だろ

756 名前:デフォルトの名無しさん mailto:sage [2019/03/21(木) 07:34:08.81 ID:u3u8nbsq.net]
>>737
> 正規表現か何かで逐次マッチ検索してるはずだから
なんだその意味不明な思い込みはw
普通に考えてハッシュなりB-Treeなり使ってるだろ
そもそも逐次検索だとしても遅さが気になるほど大量の名前付き範囲使う時点でなにか間違ってると思う

757 名前:デフォルトの名無しさん [2019/03/22(金) 17:57:33.45 ID:DJ7JSKt5.net]
会社でブラウザの検索結果のページで
いっぱいURLのリンク先が表示されるのですが
そのたくさんのURLのそれぞれを開いたページ(毎回違うけど50ページくらいある)のデータを取得するVBAのコードを考えています。
IEの定番のCreateObject("InternetExplorer.Application")とDOMツリーの方法で実現できてはいるのですが
1つ1つページを開いて取得して閉じる、という作業がネットワークの遅さで異常に時間がかかります。
この複数のページを同時で取得する方法ってないでしょうか?よく知らない

758 名前:ッどJavaでいうスレッドみたいな? []
[ここ壊れてます]

759 名前:デフォルトの名無しさん mailto:sage [2019/03/22(金) 18:35:53.24 ID:HaipTOms.net]
>>741
VBAはマルチスレッド非対応だから無理

760 名前:デフォルトの名無しさん [2019/03/22(金) 19:06:27.17 ID:DJ7JSKt5.net]
>>742
そりゃないよ、かあちゃん

761 名前:デフォルトの名無しさん mailto:sage [2019/03/22(金) 19:28:02.41 ID:s6oj+Xdm.net]
>>741
VBAでマルチスレッドは基本的に出来ないと考えるべき。
物凄く不安定だし、Excelのオブジェクト(Rangeとか)を触った途端にExcelが消える。
で、マルチスレッドは出来ないけどマルチプロセスは出来る。

1.プログラムのブックに指定のURLのページの情報を取ってくるプロシージャを作る
2.複数のExcel.Applicationを使って、自分自身のブックを別のExcelから開くメインプロシージャを作り、その中でobjExcel.Runを使って情報を取ってくるプロシージャを動かすようにコードを書く。
3.ブックを保存する。
4.メインプロシージャを動かす

たぶん、こんな感じでできたはず。

762 名前:デフォルトの名無しさん [2019/03/22(金) 19:35:54.55 ID:DJ7JSKt5.net]
>>744
ありがとうございます。
しかし、もし50個URLがあれば50個新しくExcel自体を起動しないといけないのですか?
そんなことしたら激重になってしまうように思うのですが。

763 名前:デフォルトの名無しさん mailto:sage [2019/03/22(金) 19:38:23.65 ID:ls5du2vw.net]
複数のInternetExplorer.Applicationのインスタンス立ち上げれば行けんじゃないか



764 名前:デフォルトの名無しさん mailto:sage [2019/03/22(金) 19:57:22.45 ID:HaipTOms.net]
>>746
今それができないって会話をしてたところだけど理解してる?

765 名前:デフォルトの名無しさん mailto:sage [2019/03/22(金) 20:04:27.42 ID:ls5du2vw.net]
>>747
どこでそれが出来ないって話をしてる?

766 名前:デフォルトの名無しさん mailto:sage [2019/03/22(金) 20:19:56.99 ID:HaipTOms.net]
>>748
>>742

767 名前:デフォルトの名無しさん mailto:sage [2019/03/22(金) 20:49:35.12 ID:n3e2TSgf.net]
>>741
フレームを50個並べたページのHTMLをローカルで作って開けば一気に読み込んでくれる

768 名前:デフォルトの名無しさん mailto:sage [2019/03/22(金) 21:25:13.65 ID:uvzdlIQp.net]
なんか勘違いしてるやつがいるけど、VBAがマルチスレッドじゃないことと、IEを複数開くのはまったく別のことだからな

IEはOfficeとはまったく無関係の独立したプロセスだから、いくつでもインスタンス化できるし同時にネットアクセスできる
IEオブジェクトを配列で作っといて、ページの読み込み完了を待たずにどんどん開いてけばいいんだよ

769 名前:デフォルトの名無しさん mailto:sage [2019/03/22(金) 22:10:54.82 ID:HaipTOms.net]
>>751
そのプロセスを制御するVBAがシングルスレッドだろ

770 名前:デフォルトの名無しさん mailto:sage [2019/03/22(金) 22:13:33.32 ID:HaipTOms.net]
>>751
あ、開けば終わりと勘違いしてる?

771 名前:デフォルトの名無しさん mailto:sage [2019/03/22(金) 22:13:49.76 ID:LAgBLCyu.net]
IEにタブをいくつも開いてもらって、みんな読み込んだところでおもむろに順番に処理すればいいってことだろ。

772 名前:デフォルトの名無しさん mailto:sage [2019/03/22(金) 22:15:47.88 ID:CAtaruvO.net]
>>752
VBAはシングルスレッドだが、IEでの読み込みは同時並行的にやってくれるんじゃねえの?

773 名前:デフォルトの名無しさん [2019/03/22(金) 22:38:21.07 ID:DJ7JSKt5.net]
>>750

>>751
その具体的な方法をコードで例示する形で教えていただきたいのでござるよ。

いまだと
Do While readyState < 4
Do Events
Loop
の待ちを50個のURLで1つ1つ順番にやってて
1つのURLを読んでデータ取って閉じる、というのをやるのが社内ネットワークが遅いため(データベースからの読み込みも含まれるからの)1つあたり1分近くかかってる。
だから異常に時間がかかる。
一気に全部同時にやれないかなと。



774 名前:デフォルトの名無しさん mailto:sage [2019/03/22(金) 22:40:55.80 ID:tgov+uRX.net]
そんなもんそれこそ流行りのRPAでやればいいのでは

775 名前:デフォルトの名無しさん mailto:sage [2019/03/22(金) 22:40:56.05 ID:HaipTOms.net]
できるっていうくせにコードは出てこないのね

776 名前:デフォルトの名無しさん mailto:sage [2019/03/22(金) 22:57:51.11 ID:HaipTOms.net]
そもそも回線が細いのはプログラムでどうこうできないから上司を説得して諦めてもらうしかない

777 名前:デフォルトの名無しさん mailto:sage [2019/03/23(土) 01:14:24.21 ID:BU4e6Kdq.net]
趣味でやってるんじゃなかったら
適当なダウンロードソフト使ったほうが良いんじゃない

778 名前:デフォルトの名無しさん mailto:sage [2019/03/23(土) 12:00:24.62 ID:36Js1rz1.net]
動くかどうか試してないけど、こんな感じでいいんじゃない?
もう少し効率を上げるなら、読み込めたページからさっさと処理してもいいし

Sub test()
  pg = 50   ' 同時に開きたいページ数
  Dim ie() As Object
  Dim url() As String
  ReDim ie(pg-1)
  ReDim url(pg-1)
'ここでURL設定
  For i = 0 To pg-1
    Set ie(i) = CreateObject("InternetExplorer.Application")
    ' ie(i).Visible = True  '表示しない
    ie(i).navigate url(i)
  Next
  Do
    flg = True
    For i = 0 To pg-1
      If ie(i).readyState < 4 Then
         flg = False
      End If
    Next
  Loop Until flg  '全ページの読み込み待ち
'ここで読み込んだページを処理
End Sub

779 名前:デフォルトの名無しさん [2019/03/23(土) 15:33:38.79 ID:BqJUz3fJ.net]
>>761
ありがとうございます。
試してみます。
最初のFor Nextループがものすごく時間がかかりそうで楽しみです。
あと先日は説明の簡略化のためにシンプルに書いたけど
実は開いたURL内で、ある条件があると、さらにその親URL内のAリンクの子URLも開かないといけない複雑な事情があるのです。

780 名前:デフォルトの名無しさん mailto:sage [2019/03/23(土) 19:47:18.63 ID:h2FSWEPH.net]
>>761
Exit For抜けてますよ
フラグも i = pg-1まで行けたときに立たせるだけで十分だと思います

あと、非表示でIEを50立ち上げると中断した時のプロセスの掃除が大変なので、Ajaxで無ければXMLHTTP60を使うのも手かもしれません。

781 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 00:51:51.95 ID:gZMjxNOF.net]
>>752
まさかIEオブジェクトの読み込み動作がVBAのスレッドで処理されてると思ってるのか?
>>753
終わりじゃないので考慮点はある

コード書こうかと思ったけど、>>761さんが書いてるからまあいいか
読み込み完了の検出とかどうするか悩みどころではある
イベントハンドラの動的設定か、せめてWithEventsが配列にも宣言出来ればなぁ

まあ50も多重化してもオーバーヘッドかかるだけで高速化しない気がするから
数個固定で持たしてイベントハンドリングするのが現実的かもしれん

782 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 01:34:57.18 ID:Y3S3b5Ai.net]
この場合Do Loopを抜ける条件が全ページの完了だから、Exit Forはあってもなくても結果というかスピードは変わらないね
さっさと抜けたところで、またForループに戻るだけだし

個人的には「pg - 1」が何回も出てくるのが美しくないなあとか、ForとDoの順番を逆にした方がコンパクトになりそうだなあとか

783 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 01:38:23.22 ID:Y3S3b5Ai.net]
一括処理なら、この方がコンパクト
まあ、ホストの応答速度や、次の処理の内容次第では終わったページからどんどん片付けた方がいいだろうけど
For i = 0 To pg-1
Do
Loop Until ie(i).readyState >= 4
Next



784 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 08:29:39.64 ID:myNgr9GS.net]
>>765
> 個人的には「pg - 1」が何回も出てくるのが美しくないなあとか
C言語とかに慣れてるんだろう
VBA的には
ReDim ie(1 To pg)
ReDim url(1 To pg)
For i = 1 To pg
だろうね
可能であればieとurlをTypeで纏めてそれを配列にした方が見易い

785 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 08:58:33.34 ID:Mw3X0nZC.net]
>>766
ははは、これは笑った。確かにこれが単純明快でコンパクト w

786 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 10:28:46.47 ID:3PVCt58k.net]
>>766
それだとサイズのでかいページで待ちが発生する

Do
For i
If ie(i)準備完了 And i.処理フラグFalse then
処理
処理フラグTrue
カウント
End if
Next
カウント=50 exit
Loop

787 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 10:33:07.42 ID:Mw3X0nZC.net]
>>769
投げてからの待ちだからいいんじゃねえの?
俺はやった

788 名前:アとないから知らんが、投げたらあとはIEが並行処理で取ってくるんだろ
で全部取ってから次の処理なら問題ない
でかいページでVBAが待っていても同時に他のページもIEが取って来てるんじゃねえの
だからでかいページで待っていてもそれが終わったら他の軽いページも取り終っていてあとは
ばたばたと進んで終了、と理解している
[]
[ここ壊れてます]

789 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 10:52:55.88 ID:Mw3X0nZC.net]
>>769
ああ、すまん。それがわかってる上で待ち時間がもったいない、ということね
>>766もそこは注意書きはしているな

790 名前:デフォルトの名無しさん [2019/03/24(日) 10:56:37.24 ID:OZ1kvGmt.net]
IEはマイクロソフトも使うなって言ってるのに
VBAって不便だよね

791 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 11:58:25.29 ID:yYEn14s6.net]
IE使えなくなったら、どうやってブラウザ制御するの?
UIAutomation面倒くさいかから、

792 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 11:58:47.29 ID:yYEn14s6.net]
getElementByしたいんだけど。

793 名前:デフォルトの名無しさん [2019/03/24(日) 12:34:48.16 ID:4ve/ST91.net]
IE使えなくなったらってもう使ってる人なんていない
セキュリティに甘いとこは使えるのか?



794 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 13:28:35.85 ID:Y3S3b5Ai.net]
ちゃんと動くのか試してみた
たしかにIEが複数開いて、平行処理でページを取ってくるね
VBAのシングルスレッドとか完全に無関係やん

795 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 13:33:22.28 ID:gDjNFFGJ.net]
>>776
まだそこ?

796 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 13:36:50.26 ID:PYh3zpOu.net]
大昔からあるファイルシステムだって非同期読み書きできる
1000倍遅いネットワークで出来ないはずがないだろうが

797 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 13:55:48.62 ID:gDjNFFGJ.net]
>>778
無能管理職かよ

798 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 14:55:03.02 ID:gZMjxNOF.net]
現実的には50並列で全ページ完了待ちするのはどうもなぁ

あと全力でループまわして完了待ちするのも無反応になるんじゃね
とりあえずDoEvents挟もうぜ

>>776
スレッド以前に、IEオブジェクトが別プロセスだから
アウトプロセスのCOM使うのはVBAで並列やる、おそらく安全で簡単な唯一の方法
まあCOM作る方は大変だがな

>>777
OSがサポートしてるだけで、VBAから使えるかどうかとは別の話
VBAで非同期並列やりたければ、基本的にはイベントベースでしかサポートされていない

799 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 17:00:18.75 ID:cASdygc2.net]
>>776
これ、1つずつ待つ部分がVBAでマルチにしたいって話だったけどCreateObjectで既に別プロセスだから全部投げてから全部の完了を待つので正解なんだよな。

勘違いしてマルチプロセスでやろうとしちゃったよ。
ついでにApplication.Runで出来なくて、迷ってたんだけど、またまた勘違いでApplication.OnTimeが正解だった。
でもOnTimeって戻り値が取れないんだよな。

800 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 17:02:38.91 ID:cASdygc2.net]
あと、ExcelVBAスレにあるようにInternetExplorer.Applicationじゃなくて別のオブジェクトの方が早いと思うよ。

801 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 17:15:34.95 ID:3PVCt58k.net]
講釈垂れはいいからコードはよ

802 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 17:48:52.18 ID:yrUzMInJ.net]
とりあえずDoEvents。

803 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 21:00:07.33 ID:IVIO7oct.net]
取りあえず書いてみたんだが、1つずつ待っても速度が変わらん。
テスト用に繋げた所があんまり時間が掛からん所でReadyStateのループに入らんのよ。

取りあえずInternetExplorer.Applicationはやっぱり遅かった。
59個のURLから同じ場所にある特定のデータを取ってくる処理でMSXML2.XMLHttpなら5秒のところIEだと60秒くらい掛かった。



804 名前:デフォルトの名無しさん mailto:sage [2019/03/24(日) 23:42:52.24 ID:Y3S3b5Ai.net]
IEを普通にUIを持ったアプリケーションとして開けば、クッキーや画面のレンダリングからアクセス履歴の更新やキャッシュの整理までいろんな処理が走るから、そりゃ実質GETだけのXMLHTTPと比べたら遅くなるのは当たり前と言うか

>>785
画像検索にそれぞれ違うキーワードを設定すれば、それなりに時間がかかるようになるから負荷のテストにはおすすめ

805 名前:デフォルトの名無しさん mailto:sage [2019/03/25(月) 08:15:58.30 ID:O3TyiYmg.net]
>>786
そんなことは知ってるが、ここの話で具体的なのがIEだから、いやいや、IEはこんなに遅いですよと注意喚起したんだよ。

まあ、Script関連でIEじゃないと駄目な場合もあるけどね。

806 名前:デフォルトの名無しさん mailto:sage [2019/03/25(月) 21:50:57.49 ID:D+uIa6Au.net]
真のエクセラーならieなんか使わずにwebクエリーとか使って何とかするべきだろうが

807 名前:デフォルトの名無しさん mailto:sage [2019/03/25(月) 23:08:06.35 ID:DuFQaNpH.net]
getElementByもWebクエリも使ったことあるけど、
Webクエリはどうやって取ってきてるのか謎。

808 名前:デフォルトの名無しさん mailto:sage [2019/03/25(月) 23:19:23.02 ID:XpTM98r8.net]
レンダリングしないでペイロードのパースだけやってるんでしょ

809 名前:デフォルトの名無しさん mailto:sage [2019/03/26(火) 00:39:52.05 ID:ke9zWH00.net]
誰もSelenium basic使わんの?
IE使わなくていいしセッション維持とかも楽だぉ?

810 名前:デフォルトの名無しさん mailto:sage [2019/03/26(火) 18:58:02.34 ID:ADoE3fhW.net]
readystateが信用ならんのがな
completeになっても完全に読み込めてなくてその後の要素取得処理に失敗とか高確率で起こるし
WinHTTP使うのが確実だと思う

811 名前:デフォルトの名無しさん [2019/03/26(火) 22:23:16.17 ID:0P7j5sat.net]
>>791
x だぉ
o だよ
正しい日本語を使いたまえ

812 名前:デフォルトの名無しさん mailto:sage [2019/03/26(火) 23:48:15.28 ID:KxwbGcFA.net]
結局Do LoopとOn Error Resume Nextで逃げるしかないっていう。

813 名前:デフォルトの名無しさん [2019/03/27(水) 00:00:47.48 ID:sk2gWEk1.net]
>>794
x 結局Do LoopとOn Error Resume Nextで逃げるしかないっていう。
o 結局Do LoopとOn Error Resume Nextで逃げるしかないっていうことですね。
正しい日本語を使いたまえ



814 名前:デフォルトの名無しさん mailto:sage [2019/03/27(水) 00:54:24.99 ID:bUJXWn5A.net]
口語体が理解できないやつが正しい日本語とか

815 名前:デフォルトの名無しさん mailto:sage [2019/03/27(水) 06:30:58.48 ID:61Xepw/0.net]
アスペかしら…

816 名前:デフォルトの名無しさん mailto:sage [2019/03/27(水) 07:39:47.73 ID:qB5RyyD6.net]
では、教えてくれ。
正しい日本語の"正しい"とはなんのことだ。
先に言っておくが、国語辞典や義務教育は関係ないぞ。

817 名前:デフォルトの名無しさん mailto:sage [2019/03/27(水) 08:38:29.06 ID:oJzskUWb.net]
>>798
お前のようなノイズではないこと

818 名前:デフォルトの名無しさん mailto:sage [2019/03/27(水) 12:48:07.16 ID:Mdwmg5PN.net]
>>798
国語辞典や義務教育関係ないと言うのならば口語体でも問題ないと思うが…。
例えば力不足、役不足のように意味を間違えて使っていては当然正しい日本語ではないが、今回の様な場合では相手方に伝われば良いということにならないか。

819 名前:デフォルトの名無しさん mailto:sage [2019/03/28(木) 20:50:35.86 ID:GAoTTZZk.net]
関西弁は正しい日本語ではない

820 名前:デフォルトの名無しさん mailto:sage [2019/03/28(木) 20:59:08.44 ID:M/yCVQ4H.net]
正しい日本語とは

821 名前:デフォルトの名無しさん [2019/03/28(木) 21:53:50.06 ID:cIkPDI6N.net]
>>796
x 口語体が理解できないやつが正しい日本語とか
o 口語体が理解できないやつが正しい日本語とかどういうこと?

822 名前:デフォルトの名無しさん mailto:sage [2019/03/28(木) 23:24:25.12 ID:Q+Q3MpKo.net]
長いのでWithするかSetしましょう。

With 口語体が理解できないやつが正しい日本語
  とか = ×
  とかどういうこと? = 〇
End With

823 名前:デフォルトの名無しさん [2019/03/28(木) 23:39:02.51 ID:cIkPDI6N.net]
Sub CorrectJapanese()
Dim text As String
Dim inputText As String
text = "口語体が理解できないやつが正しい日本語とか"
inputText = InputBox("あなたの日本語は?")
If inputText = text Then
MsgBox "アホ"
ElseIf inputText = text & "どういうこと?" Then
MsgBox "そのとおり"
End If
End Sub



824 名前:デフォルトの名無しさん mailto:sage [2019/03/28(木) 23:57:12.09 ID:OmRArJOr.net]
日付フィルターを使うときにCriteriaに設定する値って、必ず一旦Double型に型変換したDate型データをもとにしてFormat変換しなきゃいけないのかな?
Date関数の戻り値をそのままFormat変換してもうまくフィルターがかからなくて危うくハマりかけたんだが、後学のために識者がいたら教えてほしい

825 名前:デフォルトの名無しさん mailto:sage [2019/03/29(金) 00:17:35.48 ID:PdUuDb+g.net]
まともなレスには異論返せないのな

826 名前:デフォルトの名無しさん [2019/03/29(金) 00:47:46.11 ID:MmeaYZo8.net]
>>807
x まともなレスには異論返せないのな
o まともなレスには異論返せないのね

827 名前:デフォルトの名無しさん mailto:sage [2019/03/29(金) 06:46:41.33 ID:YUbMxDIL.net]
>>804
ピリオド抜けてる

828 名前:デフォルトの名無しさん mailto:sage [2019/03/29(金) 12:23:42.03 ID:Fu/JMZl+.net]
異論返せていないまともなレスとはどれ

829 名前:デフォルトの名無しさん mailto:sage [2019/03/29(金) 12:35:07.47 ID:7DnII+1F.net]
>>810
この辺りじゃないか?
>>799
>>800

830 名前:デフォルトの名無しさん mailto:sage [2019/03/29(金) 12:37:39.38 ID:FHKNInbw.net]
どうでも良いことで延々と論じるのは如何なものか。

831 名前:デフォルトの名無しさん mailto:sage [2019/03/29(金) 18:52:59.03 ID:DRFZR9Lo.net]
>>809
シンタックスエラーになります

832 名前:デフォルトの名無しさん mailto:sage [2019/03/30(土) 09:25:26.20 ID:Fw0ogXHz.net]
VBAで実行時にシンタックスエラーが出るのはどういう場合だろう
デフォルト設定だと1行入力ごとに構文解析するし

833 名前:デフォルトの名無しさん mailto:sage [2019/03/30(土) 09:27:30.74 ID:uS2atdcl.net]
>>814
それ、1行ごとの構文解析だろ
For Next Do Loop If End If
のチェックまではしてないと思うぞ



834 名前:デフォルトの名無しさん mailto:sage [2019/03/30(土) 09:28:29.64 ID:uS2atdcl.net]
ああすまん。これってシンタックスエラーではないんだっけ
でもエラーになるよね

835 名前:デフォルトの名無しさん mailto:sage [2019/03/30(土) 09:41:55.36 ID:Fw0ogXHz.net]
Nextを書かなかった場合は
「コンパイル エラー:For に対応する Next がありません。」
だった

もしシンタックスエラーのエラーコード(変数Errの値)が存在すれば出る可能性があるってことだと思うけど、コードの一覧てどこにあるんだ?
検索してVBのは出るけどVBAのが見つからん

836 名前:デフォルトの名無しさん mailto:sage [2019/03/30(土) 09:49:53.73 ID:uS2atdcl.net]
シンタックスって言葉自体は構文規則だけど、コンパイルエラーって出るんだね

837 名前:デフォルトの名無しさん [2019/04/06(土) 00:50:26.14 ID:ocPEvB9Z.net]
ExcelVBAでListViewを参照設定で追加して
フォームに配置して使っているんですが、
別フォームからshowしてすでに項目をいくつか追加してある
ListViewのあるフォームを表示したときに
ListViewをアクティブ(そのままの状態から矢印キーで項目を選択できるようにする)
にすることは可能ですが?
例えば

Public Sub UserForm_Active()
With listview1
.ListItems(1).Select
.SetFocus
End With
End Sub

とした場合に、フォーカスは確かにListView1にあるのですが、
その状態では項目が矢印キーの上下で選択することができません。
ListView1.SetFocusではListView1全体にフォーカスはあるが
肝心の中身の項目にはフォーカスがない状態ということなのでしょうか?

なにかよい方法はありますでしょうか?

838 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 19:10:32.15 ID:nvpN9j7Q.net]
sendkeysで Alt↓までやっちゃうとか
あまりおすすめできる方法ではないが

839 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 00:26:59.66 ID:WKly27nG.net]
このスレは生きてますか

840 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 17:39:05.84 ID:VJZKP3mE.net]
一応生きてるでしょ。

841 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 13:15:01.20 ID:SsAAf7AE.net]
VBA勉強中のものです。

Setステートメントを勉強しているのですが、オブジェクト型についてお聞きしたいです。RangeオブジェクトとかWorksheetオブジェクトなど、いろんなサイトなど見ても使いどころがよくつかめてないです。

どんなときに使うのか、教えてもらえるとありがたいです。

842 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 16:53:41.17 ID:SsAAf7AE.net]
Excel VBA 質問スレで質問してみます。お邪魔しました m( _ _ )m

843 名前:デフォルトの名無しさん [2019/05/12(日) 02:32:02.86 ID:0u/cIV/f.net]
>>823
オブジェクトなら同じものを頻繁に扱うときにコーディングミスをしにくくなる。

毎回、名前でアクセスしていると、ちょっとしたことで、別のものを間違って扱う可能性が高まって、実行時エラーを発生させやすくなる。

定数化していれば防げるが、定数のスコープを大きくしないといけないので、定数の値を変えるときにあっちこっちを確認しながら、直すことになり面倒なことになりやすい。



844 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 13:34:22.56 ID:p6Zrf1zY.net]
object型の初期状態はNothing
参照先が存在しない場合もNothing返るのがあってis式で判定できる
一方でvariantの初期状態はemptyなのでis式がエラーになる

845 名前:デフォルトの名無しさん [2019/05/13(月) 18:12:50.85 ID:/95lNMvT.net]
オブジェクトの値がNothingかどうかで判断するロジックはセンスがいいとは思えない。

846 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 22:51:51.62 ID:RqskJpsp.net]
Typenameとか列挙定数とかポインタ関数の値で判定するのが良いわな

847 名前:デフォルトの名無しさん [2019/05/13(月) 23:46:53.76 ID:4/CDP/BQ.net]
自分で変数の値をコントロールしているのに、Nothingかどうかをあちこちで確認しているクソプログラマと1年前に仕事した。

848 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 08:31:35.00 ID:BLcva127.net]
>>827
ライブラリ側は何で判定すべきなんだ?
それともNothingを渡されたら挙動は未定義とするとか?

849 名前:デフォルトの名無しさん [2019/05/14(火) 11:18:55.94 ID:4FRIObo4.net]
>>830
そのライブラリは他人が作ったものなのか?自分が作ったものなのか?

850 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 11:29:20.25 ID:5X9vxJLP.net]
判定すべきものが、誰が作ったかによって変わる?

851 名前:デフォルトの名無しさん [2019/05/14(火) 12:37:11.77 ID:W+bs/bzK.net]
ライブラリに状態を持つプロパティがあればいい。

他人が作ったものを使うしかなく、オブジェクトがNothingかどうかでしか判断できないのなら、そうするしかない。

852 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 13:35:55.15 ID:UTGAJPws.net]
>>833
ライブラリ関数が引数として受け取ったオブジェクトをどうNullチェックするかの話だぞ?

853 名前:デフォルトの名無しさん [2019/05/14(火) 16:16:33.74 ID:E8REZJpG.net]
いきなりライブラリと言われても何のことやらわからない。



854 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 17:30:53.68 ID:UTGAJPws.net]
>>835
>>827 が「オブジェクトの値がNothingかどうかで判断するロジック」って言ってるじゃん。
ある関数がオブジェクトを受け取ったときの判断方法の話だと思うんだけど、
自分はライブラリ作者なのでその場合どうするのがいいのか気になった。

855 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 21:45:48.80 ID:s0Vi/y5R.net]
普通にエラーでブレイクすればいいじゃん

856 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 22:22:18.25 ID:jcYCvcdA.net]
>>837
エラーとは限らないけど変数の状態に応じて処理を分けたいと言うのはある。
空のオブジェクトに対してはまた空を返すとかね。
>>829の言ってることはわかるんだけど、>>827>>828の主張がわからん。
Nothing判定はシンプルだけどTypeNameやenumだともっと分岐のパターンが増えちゃうじゃん。

857 名前:デフォルトの名無しさん [2019/05/14(火) 23:23:54.78 ID:+OBjJPst.net]
>>836
世の中、変なやつがいて、オブジェクト変数に値をセットして、何も変わるはずがないのに、直後にオブジェクト変数の値がNothingかどうか判定するコードを書くやつがいる。

858 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 23:30:59.65 ID:KmX6ljlC.net]
代入が成功したかどうか確認するテクニックも存在するから、そういう分野からの転職かな?
具体的には、コンパイラの型チェックを使った裏技だったり、ハードウェアの故障チェックなんかで使われる

859 名前:デフォルトの名無しさん mailto:sage [2019/05/15(水) 00:37:47.48 ID:yOOg6UjC.net]
直後であってもサブルーチンに分かれてるなら
入力情報のチェックを行うのは普通のこと

860 名前:デフォルトの名無しさん [2019/05/15(水) 02:24:21.58 ID:MwugOkQt.net]
なんか例のCプログラマがしつこいけど、いまどき関係ない別プロセスがメモリ上の値を書き換えたりするミスは、OSレベルでもCPUレベルでもあるので、持論を批判されていると思って反論しなくていいよ。

ここは漠然としたVBAのスレッドだから、見ているひとにはあなたの言うことは難しくて理解できないと思うよ。

スルー力がないのか、寂しくてかまってほしいのか知らないけど、要はクソコードを書くなと言ってるだけだ。

861 名前:デフォルトの名無しさん [2019/05/15(水) 02:28:07.88 ID:MwugOkQt.net]
なんでVBAスレで組み込み系のショボいハードウェアでのプログラミングを語っているのか?

ハードウェア、OS、ミドルウェア、プログラミング言語によって考え方やどこまで想定するのかは全然、違うからいっしょくたにしないでもらいたい。

862 名前:デフォルトの名無しさん mailto:sage [2019/05/15(水) 02:29:01.28 ID:O3OiMSIx.net]
一般ユーザー権限のアプリで別プロセスのメモリにアクセスできたのは、平成どころか昭和時代の話ですよ、おじいちゃん
希にOSやCPUのバグ騒ぎが起きますが、そんなのは例外中の例外なんで普通は気にしなくていいことです

863 名前:デフォルトの名無しさん [2019/05/15(水) 02:37:35.16 ID:MwugOkQt.net]
Windows 95、98、98SE、MeがいつのOSかもわからないのか



864 名前:デフォルトの名無しさん mailto:sage [2019/05/15(水) 05:12:46.46 ID:TahQLJDH.net]
そこまでわかってるのに、タチの悪いやつだな

865 名前:デフォルトの名無しさん mailto:sage [2019/05/15(水) 16:00:34.96 ID:D3RbfE7K.net]
イベント用インスタンスはPublicでやるの?

866 名前:デフォルトの名無しさん mailto:sage [2019/05/15(水) 20:12:16.23 ID:XVltvZnu.net]
せっかくのイベントなのにPrivateにしたら星飛雄馬のクリスマスパーティーみたいになるじゃん

867 名前:デフォルトの名無しさん mailto:sage [2019/05/15(水) 20:14:51.37 ID:RIeke8Yt.net]
>>848
座蒲団3枚あげる

868 名前:デフォルトの名無しさん [2019/05/15(水) 20:49:39.00 ID:WHH9UP0v.net]
何か面白いこと言った?
全然わからない。
興味あるからなぜ面白いか教えて?

869 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 02:08:04.88 ID:Ab5DOH6n.net]
>>850
ニコ動
https://www.nicovideo.jp/watch/sm9033179

870 名前:デフォルトの名無しさん [2019/05/16(木) 14:30:12.55 ID:wWtnEH3A.net]
コード書く画面を
背景は黒に、文字は白に、する方法を教えれ

871 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 17:24:09.37 ID:EX4VaMcQ.net]
>>852
ダークテーマと天に向かって3回唱える

872 名前:デフォルトの名無しさん [2019/05/16(木) 17:37:55.97 ID:wWtnEH3A.net]
>>853
知っておる
mevius.5ch.net/test/read.cgi/tech/1556203263/261-
下がってよいぞ

873 名前:デフォルトの名無しさん mailto:sage [2019/05/23(木) 22:41:23.89 ID:ufKYoT27.net]
Wordで文字置換をしたいのですが、特定のフォントの文字列を検索して、文字列は変えずにフォントだけ変えたいです。半角を全角にしたいのですが可能でしょうか。ヒントだけでも教えていただけると有り難いです。



874 名前:デフォルトの名無しさん mailto:sage [2019/05/23(木) 23:01:54.16 ID:ubNtK04k.net]
>>855
できる
任意のRangeのCharactersのフォントを一字ずつ調べて、探しているフォントが適用されている文字が見つかったらその文字のフォントを修正すればいい
半角から全角に変換するにはStrConv関数を使用し、第2引数conversionには列挙定数のvbWideを指定する

875 名前:デフォルトの名無しさん mailto:sage [2019/05/23(木) 23:16:33.41 ID:fmz+6NIG.net]
wordの標準機能で半角全角変換あったような

876 名前:デフォルトの名無しさん mailto:sage [2019/05/23(木) 23:29:43.67 ID:ufKYoT27.net]
>>856
ありがとうございます!
やってみます。

>>857
上手くいかなかったと思います。。

877 名前:859 mailto:sage [2019/05/28(火) 16:00:47.95 ID:JWvhlEsx.net]
Findを利用したコードについて教えて下さい。

書籍、サイトで掲載されていたコードを利用し、少し変えたものです。
Findメソッドを使ってC列の”たろう”を検索します。
探し出したら、A〜C列の文字列をE列に結果を返すように作り替えてみましたが、結果がE1〜G1に上書きされてしまいます。
Cells(Rows,count を理解しきれていない、11行目のCells(i,”E”)の部分も理解していないと感じます。
どのように違うのか、ご指導お願いします。


ワークシートはこんなかんじ E列からG列は実行後の結果をイメージしたものです
  A  B   C   D  E    F  G
1 日付 売上 担当者    000  AAA たろう
2 000 AAA たろう     333  DDD たろう
3 111 BBB はなこ
4 222 CCC たかし
5 333 DDD たろう
6 444 EEE はなこ
7 555 FFF くみこ

878 名前:859 mailto:sage [2019/05/28(火) 16:01:28.69 ID:JWvhlEsx.net]
859の続き

Sub Find()
Dim temp As Range, tempAddress As String, i As Long

With Range("A1").CurrentRegion.Resize(, 1).Offset(, 2)
Set temp = .Find(what:=“たろう”)
If Not temp Is Nothing Then
tempAddress = temp.Address
i = Cells(Rows.Count, "E").End(xlUp).Row

Do
temp.Offset(columnoffset:=-2).Resize(, 3).copy Cells(i, "E")
Set temp = .FindNext(temp)
Loop While temp.Address <> tempAddress
End If
End With
End Sub

Sub copy()
Range("A:G").Clear
Worksheets("template").Range("A1:C7").copy Destination:=Worksheets("Sheet1").Range("A1")
End Sub

879 名前:デフォルトの名無しさん mailto:sage [2019/05/28(火) 16:38:34.40 ID:Z4r31Ymp.net]
>>860
i=i+1 が抜けてるだけじゃね?

880 名前:デフォルトの名無しさん mailto:sage [2019/05/28(火) 16:40:41.12 ID:Z4r31Ymp.net]
>>861
それと、行や列用の変数として r c 使ってもええんやで

881 名前:859 mailto:sage [2019/05/28(火) 17:30:10.75 ID:xKlK3b52.net]
>>861
ファッ!それかも!
マジでありがとうです!
何かあったらまた聞きます
ホントありがとう、頭いい人!

882 名前:デフォルトの名無しさん mailto:sage [2019/05/28(火) 18:33:24.92 ID:1J9FOJWe.net]
初心者です。
Wordのユーザーフォームを作りたいのですがExcelの書籍しかなくて詰みました。
Excelのセル番地『A1』に相当するのが『ActiveDocument .tables (1) .cell (1.1)』というところまで突き止めて、
とりあえずテキストボックスに打ち込んだ文字列をセルに転記するところまではできたのですが、それ以上のことができません。
例えば繰り返し同じフォームを使う前提で、古いデータを削除したい時、Excelならば
『Range("A1") .CleanContents』で済むっぽい(うろ覚え)ですが
これをActiveDocumentで再現するにはどうすればよいでしょうか。

まだ文法など全く理解できていませんが、素人目に『Range(”ActiveDocument .tables (1) .cell (1.1)”).Select .CleanContents』
などと書いてしまいたい訳です(当然、動きませんでした)
加えて、WordVBAを中心にお勧めの書籍などありましたら教えていただきたいです。
今の書籍は痒いところに手が届かず…

883 名前:859 mailto:sage [2019/05/28(火) 19:44:38.82 ID:xKlK3b52.net]
>>861
set temp = .findnext(temp)の下に
i=i+1を入れた所、できました。
本当にありがとう!助かりました(T^T)



884 名前:デフォルトの名無しさん mailto:sage [2019/05/29(水) 00:12:19.46 ID:S0wmSPvZ.net]
>>864
定番は「最速攻略 Word マクロ / VBA徹底入門」
Word VBAの書籍やWEBサイトは選択肢が圧倒的に少ないから、基本がわかったらVBEのオブジェクトブラウザやネットでMSDNを見た方が確実

885 名前:デフォルトの名無しさん mailto:sage [2019/05/29(水) 09:29:45.93 ID:YAhbpcsl.net]
学校でVBAを勉強した方はどんな

886 名前:Q考で勉強したんでしょうか? []
[ここ壊れてます]

887 名前:デフォルトの名無しさん mailto:sage [2019/05/29(水) 09:30:35.46 ID:YAhbpcsl.net]
×参考
◯参考書

888 名前:デフォルトの名無しさん mailto:sage [2019/05/29(水) 09:32:43.10 ID:YAhbpcsl.net]
書籍の名前聞いてみたい

889 名前:デフォルトの名無しさん mailto:sage [2019/05/30(木) 15:12:11.08 ID:V/L1IaNJ.net]
>>Wordのユーザーフォーム
必要性が今一分からん

890 名前:デフォルトの名無しさん mailto:sage [2019/05/30(木) 18:04:51.34 ID:2aR1E9YD.net]
Wordは機能拡張に凝り出すと面白いよ

891 名前:デフォルトの名無しさん mailto:sage [2019/05/30(木) 18:38:59.73 ID:3bWSKYGB.net]
>>870
いろんなソースで、色つけたり太字にしたり、用紙指定や段組みして印刷させる

炎上プロジェクトに突撃するのに必須

892 名前:デフォルトの名無しさん mailto:sage [2019/05/30(木) 18:47:13.10 ID:2aR1E9YD.net]
>>864
'選択範囲内にあるテーブルの一行目以外をクリアします。
Sub clearSelectedTableData()
If Word.Application.Selection.Tables.Count = 0 Then
'MsgBox "Select Any Table!"
Exit Sub
End If
Dim t As Word.Table
For Each t In Word.Application.Selection.Tables
Dim r As Long, c As Long
For r = 2 To t.Rows.Count
For c = 1 To t.Columns.Count
t.Cell(r, c).Range.Text = ""
Next c
Next r
Next t
End Sub

893 名前:デフォルトの名無しさん mailto:sage [2019/05/30(木) 19:32:14.84 ID:2aR1E9YD.net]
こっちのがスマートだった
'選択範囲内にあるテーブルの一行目以外をクリアします。
Sub clearSelectedTableData()
If Word.Application.Selection.Tables.Count = 0 Then
'MsgBox "Select Any Table!"
Exit Sub
End If
Dim t As Word.Table
For Each t In Word.Application.Selection.Tables
If t.Rows.Count > 2 Then
Dim r As Long
For r = 2 To t.Rows.Count
t.Rows(r).Range.Delete
Next r
End If
Next t
End Sub



894 名前:デフォルトの名無しさん mailto:sage [2019/05/30(木) 19:50:35.91 ID:2aR1E9YD.net]
もし文字編集でcell()下位の.Rangeが省略されてるのを知らないと
cell.Range.Deleteの文字削除とcell.Deleteのセル削除が
使い分けができないので注意

895 名前:デフォルトの名無しさん mailto:sage [2019/05/30(木) 22:47:58.04 ID:JR52NV0g.net]
>>871
そうだろうけど、
他のOfficeでも出来るんじゃないの?
拡張って参照設定の事でしょ?

>>874
マジかよWord Tableって・・。
ExcelでSQLが使えたり、Officeは割と何でもありだとは思っていたが・・。

896 名前:デフォルトの名無しさん mailto:sage [2019/05/30(木) 23:32:10.68 ID:2aR1E9YD.net]
>>876
リボンやクイックアクセスツールバーとかで増やすほうね>機能拡張

897 名前:デフォルトの名無しさん mailto:sage [2019/05/31(金) 00:15:43.14 ID:P50R/Vqw.net]
NothingとNullとEmptyの違いがわからない
MSはナンセンス、はっきりわかんだね

898 名前:デフォルトの名無しさん mailto:sage [2019/05/31(金) 00:35:41.84 ID:/aDGaFpI.net]
EmptyはVariant型の初期状態(何も入ってない)
セルの初期状態でもある
確認方法
新規ワークシートに対して、イミディエイトウィンドウで
Print TypeName(Cells(1,1).Value)
とすると
Empty
と表示される

Nothingはオブジェクト型変数にオブジェクトが代入されていない(結びつけられていない)状態

NullはExcelだと出番がないと思っていい
主にAccessでデータを扱う時にNullが必要な場面が出てくる

899 名前:デフォルトの名無しさん mailto:sage [2019/05/31(金) 01:16:13.09 ID:gZfVve3x.net]
複数セルのRangeからプロパティとってくるとき不一致だとNullになるくらいやな

900 名前:デフォルトの名無しさん mailto:sage [2019/06/02(日) 23:52:18.62 ID:I/vPFDmN.net]
ユーザーフォームの、複数のテキストボックス、
例えばオブジェクト名をtb1、tb2とかにしてループ文に組み込むということはできますか?
オブジェクト変数というのが関係しそうな気がするんですが、
テキストを読んでも理解できない…

901 名前:デフォルトの名無しさん mailto:sage [2019/06/02(日) 23:56:26.76 ID:56udfPFB.net]
>>881
すべてのテキストボックスでループ。
目的のテキストボックス群で名前を元に絞り込みすりゃ良いんじゃね。

902 名前:デフォルトの名無しさん mailto:sage [2019/06/03(月) 02:05:13.53 ID:OjX7Po3D.net]
普通はテキストボックスのTagプロバティに区別できるキーワード入れといて
For eachでUserform.controlsやると思う

903 名前:デフォルトの名無しさん mailto:sage [2019/06/03(月) 08:31:11.52 ID:mpVNxBbp.net]
>>881
controls(”tb” & i)



904 名前:デフォルトの名無しさん mailto:sage [2019/06/03(月) 13:44:44.83 ID:DCISZKmM.net]
>>881
オブジェクトの配列作って、という事だと思うけど
使うとしたらオブジェクト参照を保持したまま色々したい時ぐらいかも
値の参照とセットだけなら皆さん挙げられているcontrolsでやりますね

905 名前:デフォルトの名無しさん [2019/06/08(土) 00:31:30.90 ID:ycKO1KOa.net]
vba スタンダード 、accessのおすすめの問題集ってやっぱり公式テキストでしょうか。

906 名前:デフォルトの名無しさん mailto:sage [2019/06/08(土) 11:47:13.10 ID:pWKWNjKi.net]
エクセル Cells(1,1)
ワード   Cell(1,1)
        ↑
      は? 何でワードにはsが無い?

907 名前:デフォルトの名無しさん mailto:sage [2019/06/08(土) 16:19:13.22 ID:pA8BerVC.net]
>>886
先月に出題範囲かわったし公式でしょ

908 名前:デフォルトの名無しさん mailto:sage [2019/06/08(土) 16:27:53.67 ID:pA8BerVC.net]
>>887
Word.Selection.CellsとかRow.Cellsとかあるで
Tableには.Cell(1,1)しかないがな
ちなCellsはxy指定できんがCellはxy指定必須や
エクセルのプロパティのほうが異常なんやで

909 名前:デフォルトの名無しさん [2019/06/12(水) 20:44:31.77 ID:WUwNpP1f.net]
新垣結衣 AVデビュー
https://www.xvideos.com/video48369883/_ai_

910 名前:デフォルトの名無しさん [2019/06/12(水) 21:19:56.07 ID:Hop9ON+a.net]
vba エキスパート は、excel ベーシック以外は公式テキストまだだから受験は待ったほうがいいですよね。

911 名前:デフォルトの名無しさん [2019/06/19(水) 04:56:48.65 ID:tVNS+22r.net]
【出資】松本卓朗 人工知能詐欺【注意】
https://rio2016.5ch.net/test/read.cgi/rikei/1560859403/

912 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 19:31:10.71 ID:XS1zoxjN.net]
以前word VBAの質問をした者ですが、その節はありがとうございました。
お陰様で処女作のユーザーフォームが完成しかかっているのですが、最終問題に難儀しています。
やりたい事:「保存」ボタンを押す→ActiveDocumentと同じ場所に「記録表」というフォルダを作成し、
その中に「"氏名”」というファイルを生成する。既に「記録表」のフォルダがあればフォルダは作成せず、
そちらにファイルを生成する。
なお、不特定多数のユーザーが使う前提です(保存場所を手打ちしたらユーザー名で詰む)

四苦八苦しましたが、ひとまず確認用にdesktopに生成しようとしてなんかユーザーフォルダの滅っ茶根深い場所に生成されたり、
推測で打ってみたメソッドが全く機能しなかったり(フォルダの有無を確認するようなのって何だろう)
なんというか、Excelのfxボタンみたいにメソッドの内容を教えてくれるやつ、ないんですかね…
ちなみに職場のPCはスタンドアロンでヘルプに繋がらず、自宅PCにはOfficeが入ってないです。

913 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 22:54:40.46 ID:klKakRL3.net]
>>893
オフラインヘルプインストールできなかったっけ… 見てみて

F2キーでオブジェクトブラウザが表示される
これ無しで開発なんてやってられない



914 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 05:52:40.82 ID:A+zOKxp7.net]
今オフラインのヘルプって提供されてないんじゃないのか?

915 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 08:17:29.97 ID:uunD1dKc.net]
>>893
デスクトップはエクスプローラーの左のとこにカタカナで出てるとこと同じやで
深いとこにできても、そちらから近道すればよろし

916 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 08:27:47.11 ID:uunD1dKc.net]
>>893
〉フォルダの有無確認
昔は Dir()だったけど、今は filesystemobjectかな。
参照設定も必要なので使い方も含めてggッテください
folderexists()

917 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 10:33:29.10 ID:aRzPCUod.net]
公式オフラインヘルプがあったのは2013だな



918 名前:2016もオフライン版があるけど英語
https://github.com/OfficeDev/VBA-content/

基本的な機能は2013からあんまり変わってないから、2013用のヘルプを入れてしまうという手もある
使い勝手は悪いけど、いつでも参照できるという利点はあるから
[]
[ここ壊れてます]

919 名前:デフォルトの名無しさん mailto:sage [2019/06/26(水) 09:21:12.11 ID:IYAeNPRu.net]
Activedocument.Pathで所在フォルダのパスが出せる
これとフォルダ名とファイル名繋げた文字列つくればSaveAs2の引数にできる

920 名前:デフォルトの名無しさん mailto:sage [2019/06/26(水) 18:32:58.67 ID:pdVAutd4.net]
質問です。excel2016の並び替え機能で
漢字、かな(あ〜ん)、アルファベット(a〜z)で並べ替えて漢字の中でも「本店」を最上位とできませんかね?

降順だと上記並びなのですが、かな(ん→あ)、アルファベット(z→a)になります。
Custumorder に「本店」を入力すると漢字中で1番下になります。

よろしくお願いします

921 名前:デフォルトの名無しさん mailto:sage [2019/06/26(水) 20:26:59.08 ID:JKpFRzRw.net]
>>900
本店の前にスペース入れる

922 名前:デフォルトの名無しさん mailto:sage [2019/06/26(水) 21:08:13.27 ID:pdVAutd4.net]
>>901
ありがとうございます。
やってみます。

923 名前:デフォルトの名無しさん mailto:sage [2019/07/04(木) 12:19:45.93 ID:Siuy47lc.net]
Wordの表で、
ActiveDocument.Tables(2).Select
みたいに選択したいのですが、どれだけ表を分割しても、
全ての表が  Tables(1) という扱いなようでエラーになります。
ひとつ前に似たようなものを組んだ時には問題なくTables(2)になりましたが、
それと構文上は全く違いはありません。
どうしたら Tables(2)という扱いになるのでしょうか。



924 名前:デフォルトの名無しさん mailto:sage [2019/07/04(木) 22:43:55.95 ID:lDcVSkIh.net]
ユーザーフォーム内のコンボボックスにUSBの中にある画像一覧というフォルダ内の全ての画像名を表示したいのですがうまくいきません。
どのように変更すればよいか教えていただけませんか?
Private Sub UserForm1_load()
Dim myList As String
Dim myPath As String
Dim iName As String

myPath = "D:/画像一覧/*jpeg"

fName = Dir(myPath & "*.jpeg")
Do While iName <> ""
If myList <> "" Then
myList = myList & " " & iName
Else
myList = iName
End If
iName = Dir
Loop

If myList = "" Then Exit Sub
myList = Split(myList)

ComboBox1.List = myList
End Sub

925 名前:デフォルトの名無しさん mailto:sage [2019/07/05(金) 02:42:43.50 ID:grV1bh4s.net]
取得するのが D:/画像一覧/*jpeg*.jpeg になってるとか
fName は iName の間違いじゃないのかとか
myList は String なのにSplitした後のものを代入してるとか

926 名前:デフォルトの名無しさん mailto:sage [2019/07/06(土) 12:30:25.64 ID:z73aGQye.net]
>>905
返信遅れて大変申し訳ありません
3つのご指摘直して反映できました。
ありがとうございました。

927 名前:デフォルトの名無しさん [2019/07/08(月) 13:46:50.21 ID:81aCmz3kf]
以下のようにWorksheet_Changeで加算して繰り返す内容で作りたいんですが、
コードまとめられませんかね?


Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address

Case "$E$3"
Range("$I$3").Value = Date
Case "$E$4"
Range("$I$4").Value = Date
Case "$E$5"
Range("$I$5").Value = Date




End Select
End Sub

928 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 16:22:05.73 ID:eKMV/4VB.net]
ExcelVBAのユーザーフォーム上で、PDFを表示、操作をしたいです。
ですが、ユーザーフォームにコントロールを追加しようとすると、
「要素が見つかりません」とダイアログが表示され出来ません。
どなたか解決策をご存じの方がいましたら、教えていただけますでしょうか。。

Acrobat pro DCはインストールしてあり、ExcelはOffice365を最新の状態で使用してます。

929 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 18:51:11.10 ID:HFVXfXT2.net]
>>908
EXCELは専用スレがあるので、そちらへどうぞ

930 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 10:59:16.22 ID:nW8IFIW6.net]
>>909
ありがとうございます。
そちらに書いてみます。

931 名前:デフォルトの名無しさん mailto:sage [2019/08/14(水) 15:00:22.98 ID:Jc+eFMLQ.net]
ここで質問していいかわからないんですが、違ったら誘導していただけると助かります。

メッセージボックスを最前面にするために以下のコードを利用したいのですが、呼び出し元の下から3行目のvbOKOnly を vbYesNo に替えた後、選択ボタンを取得する方法がわかりません。
どのようなコードを足したらいいかご教示いただけないでしょうか。

【呼び出し元】
Option Explicit
Dim WSHObj
Dim Args
Set WSHobj = WScript.CreateObject("WScript.Shell")
Args = "cscript ""C:\Program Files\PPX\script\WSHPopUP.vbs""" _
& " ""出力メッセージ""" _
& " 0" _
& " ""VBS名称""" _
& " " & vbOKOnly ←vbYesNoに替える
WSHObj.Run Args,0,true
Set WSHobj = Nothing

【WSHPopUP.vbs】
Option Explicit
Dim Arg
Dim WSHObj
Set WSHobj = WScript.CreateObject("WScript.Shell")
Set Arg = WScript.Arguments
WSHObj.Popup Arg(0),Arg(1),Arg(2),Arg(3)
Set WSHobj = Nothing

よろしくお願いします。

932 名前:デフォルトの名無しさん mailto:sage [2019/08/14(水) 19:26:49.04 ID:uFuQVnLY.net]
【呼び出し元】
Option Explicit
Dim WSHObj
Dim Args
Set WSHobj = WScript.CreateObject("WScript.Shell")
Args = "cscript ""C:\Program Files\PPX\script\WSHPopUP.vbs""" _
& " ""出力メッセージ""" _
& " 0" _
& " ""VBS名称""" _
& " " & vbYesNo
Dim hoge '受け取り用に追加
hoge = WSHObj.Run(Args,0,true) 'この変数hogeにvbYes=6かvbNo=7が入る。
'何か処理を書く
Set WSHobj = Nothing

【WSHPopUP.vbs】
Option Explicit
Dim Arg
Dim WSHObj
Set WSHobj = WScript.CreateObject("WScript.Shell")
Set Arg = WScript.Arguments
Dim fuga '戻り値用に追加
fuga = WSHObj.Popup Arg(0),Arg(1),Arg(2),Arg(3) 'popupの戻り値を取得
WSHObj.Quit fuga '呼び出し元に終了コードとして返す
Set WSHobj = Nothing

933 名前:デフォルトの名無しさん [2019/08/14(水) 19:27:35.96 ID:uFuQVnLY.net]
他にExecを使う方法もある



934 名前:デフォルトの名無しさん mailto:sage [2019/08/14(水) 20:05:03.77 ID:6C5bzX4k.net]
vbDefaultButton1 とか、そういうのじゃなくて?

935 名前:デフォルトの名無しさん mailto:sage [2019/08/15(木) 00:01:28.86 ID:GUoAoBO9.net]
>>912
ありがとうございます!
試してみます!

>>914
すみません、vbDefaultButton1 がわかりません

936 名前:デフォルトの名無しさん mailto:sage [2019/08/16(金) 11:35:25.09 ID:vco+QnrA.net]
>>912
>911,>915です。
教えていただいたコードを試してみたのですが、
‘何か処理を書く
のところに
MsgBox hoge
と入れたのですが、「はい」「いいえ」どちらの場合も 0 が返されます。
どうしたらいいでしょうか

937 名前:デフォルトの名無しさん mailto:sage [2019/08/16(金) 13:41:00.72 ID:2LlAcZB1.net]
???
VBAなの?
VBSなの?
MsgBox使えるのに、何でWscript使ってんの?

938 名前:デフォルトの名無しさん [2019/08/16(金) 13:48:44.09 ID:mZqFzvyq.net]
朗報
【アプデ/10】 2019年8月14日のWindowsUpdate後、VB関連が死亡。Windows10全バージョンにて
https://asahi.5ch.net/test/read.cgi/newsplus/1565930238/

939 名前:デフォルトの名無しさん [2019/08/16(金) 14:13:30.60 ID:WTD6eyC3.net]
>>916
【WSHPopUP.vbs】 のWSHObj.Quit fuga は間違い。エラー出してる。
Wscript.Quit fuga が正しい

940 名前:デフォルトの名無しさん mailto:sage [2019/08/19(月) 10:24:33.34 ID:ELmh1Bgt.net]
>>919
返信遅くなってすみません。

レスの通りに修正し、
さらに
fuga = WSHObj.Popup Arg(0),Arg(1),Arg(2),Arg(3) 'popupの戻り値を取得

fuga = WSHObj.Popup(Arg(0),Arg(1),Arg(2),Arg(3)) 'popupの戻り値を取得
に変更し、成功しました。

たいへん助かりました。
ありがとうございました。

941 名前:デフォルトの名無しさん mailto:sage [2019/09/25(水) 10:50:56.65 ID:L8CrQHgr.net]
WordのアクティブXコントロールのテキストボックスなのですが
BackStyleを0設定すると背景色は消えるのですが
デザインモードを解除すると背景色が出てしまいます

これはバグでしょうか

942 名前:デフォルトの名無しさん [2019/10/05(土) 18:37:18.60 ID:t92B7IO1M]
winAPIのAddClipboardFormatListenerをVBAで使う方法教えてください。
Private Declare PtrSafe Function AddClipboardFormatListener Lib "user32.dll" (ByVal hWnd As LongPtr) As Long
Sub test3()
AddClipboardFormatListener (hWnd)
End Sub
として実行してもなにも起きません。

943 名前:デフォルトの名無しさん [2019/11/05(火) 18:33:26.09 ID:CrKvYzfV.net]
DataObjectオブジェクトについて https://chiebukuro.yahoo.co.jp/

VSI



944 名前:デフォルトの名無しさん [2019/11/05(火) 18:35:53.47 ID:CrKvYzfV.net]
DataObjectオブジェクトについて https://chiebukuro.yahoo.co.jp/

FQB

945 名前:デフォルトの名無しさん [2019/11/06(水) 06:26:58.33 ID:jiZZUv+M.net]
CInt 関数 VBA vba-auto.com/cint_function_vba/

NQ2

946 名前:デフォルトの名無しさん [2019/11/06(水) 06:26:59.50 ID:jiZZUv+M.net]
CInt 関数 VBA vba-auto.com/cint_function_vba/

NQ2

947 名前:デフォルトの名無しさん mailto:sage [2019/11/21(木) 09:09:00.43 ID:IRESAa/B.net]
Exchange / Outtlook VBAの質問です
初歩的な質問で申し訳ありませんが、お知恵を拝借できないでしょうか

任意の名前を持つ配布リストや連絡先グループに属するExchangeユーザーのSMTPアドレスの一覧を取得するにはどうしたら良いのでしょうか

配布リストや連絡先グループをExchange ユーザーとして取得するところまでは出来ているのですが、そこから先がうまくいきません

なお配布リスト、連絡先グループいずれも個人ユーザーのみが登録されている前提なので、再帰によるメンバー取得は不要な状況です

948 名前:デフォルトの名無しさん mailto:sage [2019/12/31(火) 13:22:12.18 ID:CEriAQ2K.net]
エスパー的にはexchangeユーザーのユーザー一覧と配布リストのユーザーの
名前を比較すればいいんじゃね

949 名前:デフォルトの名無しさん mailto:sage [2020/04/20(月) 00:19:17.36 ID:DXvjb/RZ.net]
3日がかりの捜索ww あきらめないのな

950 名前:デフォルトの名無しさん mailto:sage [2020/05/10(日) 01:11:39 ID:DSeO3ORc.net]
3日どころじゃないぞ

951 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 10:28:15.88 ID:vLFHqXr3.net]
>>927

これについて何か解決方法ありましたか?私も配布グループ取得で難儀しております。

952 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 12:24:29 ID:palYJx03.net]
半年放置で読むかね

953 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 10:39:28 ID:vabPclBn.net]
>>927>>931って同一人物だろどうせ



954 名前:デフォルトの名無しさん [2020/06/27(土) 08:55:28.74 ID:9qJBLgyD.net]
Aex

955 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 16:37:07.95 ID:TjDVHLrR.net]
VBAの質問スレで質問するのはなぜ馬鹿ばっかりなのですか?

956 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 16:43:50.13 ID:CiV3+vm0.net]
>>935
このスレのレベルを知ってる普通以上の人はここを頼ったりはしないから

957 名前:デフォルトの名無しさん mailto:sage [2020/07/11(土) 22:25:50.10 ID:R8+8lu0C.net]
頼むからVBAでWin32 APIを呼び出すのはやめてくれ
そこまで要求するなら包括的な自作DLLを作ればよいと

958 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 04:44:26.92 ID:+vVO/8n9.net]
>>937
なんでやめてほしいの?

959 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 07:53:31.55 ID:tbEOHCQG.net]
ものぐさが使うのがVBAなのに
いちいちDLL化なんてめんどくせえ

960 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 10:51:54.06 ID:03QLQuvk.net]
>>938
Declare文が多すぎてコードが見づらい

961 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 11:07:05.40 ID:4WTYr4qc.net]
見なきゃいいだろ

962 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 14:43:36.83 ID:HEMY1mlG.net]
Win32API使える奴がDeclare文読むの?
そりゃ、間違ってるとかおかしなのも中にゃあるけど、普通そんなとこ見ないだろ。

963 名前:デフォルトの名無しさん [2020/07/14(火) 21:09:03.79 ID:66utiKuE.net]
質問スレにも書き込んだのですが二つのieを起動して2つ目のieでpdfを開いて名前をつけて保存したいのですがexecwbを行うと一つ目のieのhtmlが選択されてしまいます。どうかやり方を教えてください。よろしくお願いします。getIEはシェル取得ファンクションです。

Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.navigate "yahoo.jp

Dim ie2 As InternetExplorer

Set ie2 = CreateObject("InternetExplorer.Application")


ie2.Visible = True

ie2.Navigate2 "C:\\Desktop\test.pdf", 1



Set ie2 = getIE("test")

Dim test As String


test = "c:\test\test.pdf"


ie2.ExecWB OLECMDID_SAVEAS, OLECMDEXECOPT_DONTPROMPTUSER, test

End Sub



964 名前:デフォルトの名無しさん [2020/07/14(火) 21:45:01.80 ID:euO1Ygvg.net]
初心者です。どうかお力添えをよろしくお願いします。

965 名前:デフォルトの名無しさん [2020/07/14(火) 22:53:58 ID:euO1Ygvg.net]
すいません 自己解決しました。単純なスペルミスでした

966 名前:デフォルトの名無しさん mailto:sage [2020/08/03(月) 07:54:11.09 ID:4AChPi7X.net]
製品番号のフォルダ検索して中のPDFファイルを開くようなマクロ書いてるんだけど
先日Officeのアップデートしたら、件のマクロがしばらく応答なしになって
悪意のあるマクロ云々とか言われてExcel強制終了になった

それ以後そのマクロは激遅に
ブックのファイル名変えたりマクロの関数名変えたりするとしばらくは元の速度に戻るが
1日位経つとまた遅くなる

調べてみたら、VBScript.RegExpのExecuteメソッドが10秒位かかるようになってる
通常は30msで終わるような代物がだ

どうもShellやRunで一度に多数のPDFファイルを開いているのがお気に召さなかったらしく
ファイル名や関数名でアンチウィルスのブラックリストに載る?
そのあとはそれっぽい名前のメソッドが標的になり遅くなるような感じ

こういうの経験した人いる?

967 名前:デフォルトの名無しさん mailto:sage [2020/08/03(月) 12:15:10.36 ID:wycAObPT.net]
アンチウィルスソフトとかいうウィルスを捨てろ

968 名前:デフォルトの名無しさん mailto:sage [2020/08/04(火) 17:10:57 ID:FjnHeWDC.net]
会社のPCじゃなければそれもありだが…

paloalto trapsとかいう奴
毎回反応する訳じゃないのが嫌だし
編集中のデータも問答無用でごっそり強制終了しやがるふざけんな

969 名前:デフォルトの名無しさん mailto:sage [2020/08/05(水) 03:07:47.57 ID:EWWIYLqc.net]
除外指定すればエエやん

970 名前:デフォルトの名無しさん mailto:sage [2020/08/05(水) 09:06:26.86 ID:FS19WAoY.net]
>VBScript.RegExpのExecuteが10秒

>ShellやRunで一度に多数のPDFファイルを開いている
の関連がわからんね

この二つは分けて原因を探るべきじゃ?

971 名前:デフォルトの名無しさん mailto:sage [2020/08/05(水) 09:37:11 ID:FS19WAoY.net]
マクロ付ファイルでPDF開かせるてのは相当に怪しいと捉えられる可能性は高いね
セキュリティ変更や除外設定なんてのは出来ればしたくないだろうし引っかからないような対策があればいいがな

ShellやRunでPDF開くんじゃなくExcelもしくはWordに取り込ませるようにすると引っ掛からないかもという気がしなくもない

972 名前:デフォルトの名無しさん mailto:sage [2020/08/06(木) 06:47:20 ID:SEE4FkRy.net]
VBAから直接PDFを開くんではなく
バッチファイルを書き出し実行することで反応の確率は減ったが
アンチウイルスが反応しやすい型番とかあってよくわからん

正規表現のexecuteメソッドは「それっぽい」名前のメソッドだろ?
これがアンチウイルスが反応したときに動作してた関数から呼ばれた時だけ遅くなるんだよ
同じブック中の他の関数から呼ばれた時は高速のままだ

dir関数でフォルダ内部のファイル名取得して正規表現検索してる時だけアホみたいに遅くなる時がある

973 名前:デフォルトの名無しさん [2020/09/01(火) 22:25:39.71 ID:zpaWCruh.net]
VBA開発を頼まれた いくら位金額を提示したら良いか誰か教えてほしい

内容は不動在庫を15店舗くらいあグループ店の売り上げデータから引取先の候補を検索するシステム
商品のバーコードから行き先候補を検索する予定。


この内容ってアウトソーシングするといくら位?



974 名前:デフォルトの名無しさん mailto:sage [2020/09/01(火) 22:33:35.56 ID:l37i0zd6.net]
50円

975 名前:デフォルトの名無しさん mailto:sage [2020/09/02(水) 00:25:45.48 ID:aLOgXzIZ.net]
余裕みて1人週

976 名前:デフォルトの名無しさん mailto:sage [2020/09/02(水) 07:41:48.93 ID:9bMNhGbM.net]
>>953
マジレスするとVBAは安いので1人月50ぐらいかな。

内容の詳細が分からないが、大して難しいとは思えないので。

どんなに簡単でも50以下は有り得ない。

977 名前:デフォルトの名無しさん mailto:sage [2020/09/02(水) 12:23:19.05 ID:IJ4By44m.net]
>>953
人によるだろうな
安く提示すると未経験者とかがくるぞ

978 名前:デフォルトの名無しさん [2020/09/04(金) 13:35:21.25 ID:YrY1uJ8P.net]
皆さま回答ありがとうございました!

979 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 14:34:31.84 ID:NQbTfPgu.net]
>>946
遅レスだけど

速度が遅い件は経験ありますよ
うちの環境で調べたらSYMANTECのエンドポイントは大丈夫で、MSのディフェンダーだと遅かった
Win10のバージョンも影響したかもしれないけど、現行サポート対象バージョンは、ディフェンダーだとすべて遅い
会社のPCなんでActiveDirectory、SYMANTEC、SKYSEAがスタンダードなんだけど、更新時の不具合があったんで一部のPCでディフェンダーを使ってて発覚した
VBSの内容は、多少分岐やループはあるけど正規表現を使って置換するだけの簡単なものだった

980 名前:デフォルトの名無しさん [2020/09/09(水) 22:08:05.33 ID:kLG5WjnA.net]
ミッションクリティカルな仕事をVBAでやってるのに、
少し前から動かなくなって修正したくても前任者がこの世に不在+仕様書やマニュアル無し+社内プログラム分かる人いない
って状況割とよく聞くけど、まあ自分が担当することになったんだけど、これどーすりゃいいの?

何社かソフトウェア開発系の会社に話聞きにいったら、vbaはちょっと・・・とか、プログラムみてこれはちょっと・・・って反応だし
1千万超える金積むとなると役員に説明しなくちゃならないんだけど、なんでおまえがやらないの?みたいな反応だし
まあ、控えめに言ってこのまま止まり続けると会社潰れるから言い値で出すしか無いんだろうけど
こういう状況、ここに巣喰う人達はどうやって乗り越えたのかアドバイスやヒントください

転職、以外で

981 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 22:09:54.34 ID:vVw6LQjX.net]
ミッションクリティカルなのに止まっても平気なのか
不思議な世界観

982 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 22:58:18.76 ID:sZuFJhML.net]
>>960
素人が作っためちゃくちゃなコードのデバッグや修正は仕事でもやってるからあんまり困ったことない
言語も問わず引き受けてる

983 名前:デフォルトの名無しさん [2020/09/09(水) 23:15:38 ID:kLG5WjnA.net]
>>962
すげえ
社内システム作ってるところとかつてで色んなところに聞きいったけど数百万じゃ難しいって言われたんだ
分かる人には難しさっていうか、見積もりがわかるもんなんだな
参考までにどういうところを見て判断するもんなの?
偉い人に説明するときの参考にしたい



984 名前:デフォルトの名無しさん mailto:sage [2020/09/10(木) 01:17:25.37 ID:Uj/ZEArt.net]
>>963
変数名、インデント、コメントの入り方なんかを見れば、制作者のレベルがだいたいわかる
その上でソースの行数、モジュール数がどれぐらいか

985 名前:デフォルトの名無しさん mailto:sage [2020/09/10(木) 01:28:39.24 ID:R4ATSmnt.net]
マクロの記録をベースにしてるのは危険な感じがする
あとループの中にgotoが入ってるやつ見たときはちょっと感動した

986 名前:デフォルトの名無しさん mailto:sage [2020/09/10(木) 01:35:20.13 ID:fOUD4fUU.net]
vba捨ててまともなところに新しくシステム作ってもらった方が安いし早そう

987 名前:デフォルトの名無しさん mailto:sage [2020/09/10(木) 01:38:51.21 ID:JZj4+m/A.net]
それだと社内で仕事が無くなるおっさんたちが文句言い出す

988 名前:デフォルトの名無しさん mailto:sage [2020/09/10(木) 12:15:12.05 ID:dws80o57.net]
住宅で喩えるなら  地場でイチから設計・施工をする在来工法のパワービルダーや
社内で設計した通り加工し現地で組み立てるだけのハウスメーカー 又は方式は
一緒だけどコスト削減に特化して現地の安い下請け使って費用を抑えるローコスト系

システムを売りにしてる企業は上で言うHMに近く、依頼すればひと声一千万は相場
PBはどんどん規模が縮小してるから探すのも大変 LCHMなら見付かるかも知らんが
要求に応じかねるレベルだと思われる

当時の社内の人間が内製したレベルならその条件、例えばExcelVBAと絞って
改修・修繕の可不可(得意かどうか)を先ず相手に問えば話が早いかも知れない
業務内容を伝えるだけだとうまく伝わらずに高額商品を売る方向に話が進み兼ねない

989 名前:958 mailto:sage [2020/09/10(木) 12:19:21.40 ID:Oh+8RCfx.net]
>>964
はえ〜・・・なるほどなぁ
変数名は一応業界の人なら意味が分かる程度
インデントはルールから逸脱してるのはほぼない、とおもう
コメントはあることはあるけど助けられたコメントはほぼないな
'ここで●×処理をする Sub ●×処理(・・・・・・・) みたいなw
行数はただの改行も含めると3万行くらいで
モジュールが4、functionが500、subが1500くらい

この辺が大量にあるから難しいって説明しようとしてたんだけど
数行(ステップ?)なら別にF8ポチポチしながら追えるんだよね
じゃあ足りないのは根気だろ、みたいに言われて循環複雑なんちゃらみたいなの調べてたけど
結局こんな数字だしても理解されないだろうしなぁってのと、単に俺が素人だからってのもあって今に至る

>>966
マジそれなんだけど、何をしてるのか誰もわかんないから何を作ってもらえば良いのかも説明出来ないっていうねw
世間で言われてる炎上案件よりよっぽどかわいいレベルなのかも知れないけど
マジであと数ヶ月放置して会社潰れればいいんじゃねーかとも思ってる

990 名前:958 mailto:sage [2020/09/10(木) 12:20:28.24 ID:Oh+8RCfx.net]
>>968
おっと、同じ人かもしれんけどありがとなあ

991 名前:デフォルトの名無しさん [2020/09/10(木) 12:36:48 ID:l+lun8zf.net]
>>963
わかんねーから高めに見積もってんだよ

992 名前:デフォルトの名無しさん mailto:sage [2020/09/10(木) 13:19:24.92 ID:4mlwjCSe.net]
>>969
他人の作ったプロシージャを2千個3万行解析してドキュメントを作成しながらデバッグなら1千万はまあまあ妥当かと
設備投資でたった1千万が出せない会社は遠からず潰れると思うよ
ほかの資産や設備だって千万単位の修理はいつ発生してもおかしくないし

993 名前:デフォルトの名無しさん mailto:sage [2020/09/10(木) 22:45:47.73 ID:Oh+8RCfx.net]
>>972
詳しい人にそう言ってもらえるとたすかる
とりあえず素人がやるもんじゃ無いって話は集めたので素直に金だせやって資料作ってるw
しかし1千万つめばできちゃうってのもすげーなあ
個人にとっては大金だけど、会社にとっては中堅社員一人分/年くらいの費用だもんな



994 名前:デフォルトの名無しさん mailto:sage [2020/09/11(金) 11:34:11.36 ID:LThuGd0x.net]
解析・デバッグ・ドキュメント作成でひと声一千万?
じゃ、せっかく解析できたんだしそれをベースに新システム製作費は?
パッケージから大きく外れるものだったらオリジナル新規作成?千万? 都合?千万?

せっかく途中まで分析し始めたようだし「わたしに二千万ください、これやります」でいーじゃん

995 名前:デフォルトの名無しさん mailto:sage [2020/09/11(金) 19:07:30.23 ID:0mQCTSsr.net]
>>974
日本語で

996 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 14:01:55.06 ID:AJy8UwEC.net]
>>974
やり方教えてくれww
まあ1千万超えは最低限な感じだね
今起きてる障害を直すだけだけどね

997 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 18:15:28.87 ID:/EQXGeQJ.net]
業務止まってるのにのん気だな
せめて地方と業務とアプリぐらい概略書けば誰かがどこかを紹介するかも知れんぞ
アプリはAccessと踏んだが、どう?
どうせこのご時世、近場でなくともZoomやらでリモートしたりでのサポートだろうし

998 名前:デフォルトの名無しさん mailto:sage [2020/09/16(水) 23:50:50.45 ID:249cxrEP.net]
結局余所に投げる方向で解決した
乗り越えられるものとそうじゃないものを見極めるのも大切と思い込むことにした
なお費用は想定の2倍近くになる模様w
みんなアドバイスありがとう

999 名前:デフォルトの名無しさん mailto:sage [2020/12/20(日) 00:10:44.84 ID:14Mj/Q6q.net]
>>965
> ループの中にgotoが入ってるやつ見たときはちょっと感動した

Continue 文が無いメジャーな言語があってな。
GoTo Continue1
とか、書くときの隔靴掻痒感と言ったらもう・・・。

1000 名前:デフォルトの名無しさん mailto:sage [2020/12/25(金) 06:38:58.19 ID:wEXLIZpl.net]
もしかしてフィルタで非表示になってるセルってVBAで値参照できない?

1001 名前:デフォルトの名無しさん mailto:sage [2020/12/26(土) 04:11:48.30 ID:NJB8+QKa.net]
>>980
自己解決

1002 名前:デフォルトの名無しさん [2021/05/14(金) 13:33:45.79 ID:Kf/7Ycdt.net]
WordのVBAで質問させてください。
文書内の2種類の括弧「」『』の中にある改行だけを削除するマクロを作りたいと思っています。

例えば以下のような文章に対してマクロをかけたときに
「み

ん」





「り




以下のような結果になるマクロです。
「みかん」





「りんご」

つづきます

1003 名前:デフォルトの名無しさん [2021/05/14(金) 13:34:48.74 ID:Kf/7Ycdt.net]
Sub 括弧内の改行を削除()
Dim myRange As Range
Set myRange = ActiveDocument.Range(0, 0)
With myRange.Find
.Text = "[「『""]*^13*[""』」]"
.Forward = True
.Wrap = wdFindStop
.MatchWildcards = True
Do While .Execute = True
With myRange.Find
.Text = "^13"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
.Execute Replace:=wdReplaceAll
DoEvents
End With
Loop
End With

Set myRange = Nothing
End Sub



1004 名前:デフォルトの名無しさん [2021/05/14(金) 13:35:33.64 ID:Kf/7Ycdt.net]
自分なりに以上のようなマクロを組んでみたのですが、実行してみると、
最初の「みかん」の改行は削除されるのですが、そのあとの「りんご」の改行が削除されません
やり方をお教えいただけると助かります。

1005 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 13:58:15.10 ID:dwsPOlKo.net]
馬鹿には無理

1006 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 20:08:25.19 ID:YZr2qR8x.net]
正規表現使えば一発じゃん。
VBAって正規表現使えるんだっけ?

1007 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 20:22:39.22 ID:pWuJPMFY.net]
RegExpオブジェクトを使えば。
面倒だから俺はどうしてもというとき以外は使わない。

1008 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 20:24:37.07 ID:6X3W89ka.net]
Wordなら最初から正規表現もどきが使えるから、Excel VBAよりはちょっとだけ楽に文字列操作ができる

1009 名前:デフォルトの名無しさん mailto:sage [2021/05/15(土) 04:20:48.68 ID:rI+eK0KL.net]
>>984
正規表現でマルチラインを設定して改行を空文字に置換
RegExpオブジェクトの使い方は、他の言語より面倒な書き方だったりするけど文字を操作するなら必須だと思うよ

1010 名前:デフォルトの名無しさん mailto:sage [2021/06/10(木) 19:25:30.25 ID:CLREf/YK.net]
splitでいい感じに分割して判定してreplaceで改行無くしてくっ付けろ
「」は自分でつけたせ

1011 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 17:06:39.36 ID:qYcBJ8fd.net]
あんま実験してないから文句いうなよ
まずはさ、アホでも考えられるような地道な形でやるべきだと思うわ
そのあとに、効率性とか考えて無駄排除したりすればいいわ

Sub MainProcess()
Dim text As String
text = Sheet1.Cells(1, 1) 'A1に括弧が含まれる文字列をいれろ

Const right1 As String = "「"
Const left1 As String = "」"
Const right2 As String = "『"
Const left2 As String = "』"

text = MakeText(text, right1, left1)
text = MakeText(text, right2, left2)

'B1に結果が返ってくるぞ。途中結果はメッセージボックスで順次表示されるからループ終わるまで何度もOKおせ
Sheet1.Cells(1, 2) = text
End Sub

1012 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 17:06:59.82 ID:qYcBJ8fd.net]
>>991の続き 
Function MakeText(text As String, rightChar As String, leftChar As String) As String
Dim startPosition As Integer
Dim endPosition As Integer

Dim InstrStartPosition As Integer
InstrStartPosition = 1

Do While InStr(InstrStartPosition, text, rightChar) <> 0
startPosition = InStr(InstrStartPosition, text, rightChar)

If startPosition <> 0 Then
endPosition = InStr(startPosition + 1, text, leftChar)
End If

Dim midText As String
midText = Mid(text, startPosition, endPosition - startPosition + 1)
Dim midTextChanged As String
midTextChanged = Replace(midText, vbLf, "")

text = Replace(text, midText, midTextChanged)

InstrStartPosition = startPosition + Len(midTextChanged)

MsgBox "無限ループになっちゃった時はctrl + Breakを押せ" & vbCrLf & vbCrLf & text
Loop
MakeText = text
End Function

1013 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 17:07:53.23 ID:qYcBJ8fd.net]
つかさ、rightとleftが逆だったわ
まぁ動くからいいわ



1014 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 17:18:37.37 ID:qYcBJ8fd.net]
あれだ、最期の方に「だけが単独であると無限ループだわな
ループの条件にその辺の修正いれておいてくれ

もう寝る

1015 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 17:34:31.79 ID:qYcBJ8fd.net]
おっきした
>>992を↓に修正
Function MakeText(text As String, rightChar As String, leftChar As String) As String
Dim startPosition As Integer
Dim endPosition As Integer
Dim InstrStartPosition As Integer
InstrStartPosition = 1
Do While InStr(InstrStartPosition, text, rightChar) <> 0
startPosition = InStr(InstrStartPosition, text, rightChar

1016 名前:)
If startPosition <> 0 Then
endPosition = InStr(startPosition + 1, text, leftChar)
End If
Dim midText As String
midText = Mid(text, startPosition, endPosition - startPosition + 1)
Dim midTextChanged As String
midTextChanged = Replace(midText, vbLf, "")
text = Replace(text, midText, midTextChanged)

InstrStartPosition = startPosition + Len(midTextChanged)
MsgBox "無限ループになっちゃった時はctrl + Breakを押せ" & vbCrLf & vbCrLf & text

Dim textForCheck As String
If textForCheck = text Then
MakeText = text
Exit Function
End If
textForCheck = text

Loop
MakeText = text
End Function
[]
[ここ壊れてます]

1017 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 10:10:42.16 ID:rHnN1cM5.net]
動けば良いんだよ

1018 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 12:36:26.70 ID:3DqqBWFs.net]
腕が重くて

1019 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 00:13:05.25 ID:7BIbcRgh.net]


1020 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 00:13:11.43 ID:7BIbcRgh.net]


1021 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 00:13:18.16 ID:7BIbcRgh.net]


1022 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 00:17:13.66 ID:7BIbcRgh.net]


1023 名前:小倉優子 mailto:sage [2021/09/01(水) 00:17:27.14 ID:7BIbcRgh.net]
  ∧,,,∧ 
 (  ・∀・) 1000ならジュースでも飲むか
  (    ) 
  し─J 



1024 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 2294日 13時間 24分 43秒

1025 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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