Excel VBA 質問スレ Part41©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net
2016/04/27(水) 04:11:46.79ID:Nk+oP5xRコード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part40
http://echo.2ch.net/test/read.cgi/tech/1455817784/
※関連スレ
VBAなんでも質問スレ Part2
http://echo.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://echo.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 122
http://echo.2ch.net/test/read.cgi/bsoft/1461287268/
0557デフォルトの名無しさん
2016/06/09(木) 19:16:56.26ID:5sPb0rLuWindow10だけど日本語話してくれたよ。
他の環境でも多分なんちゃら.msiをインスコすればOKなんじゃないだろうか。
0558デフォルトの名無しさん
2016/06/09(木) 19:28:33.86ID:/Mjso7pS0559デフォルトの名無しさん
2016/06/09(木) 19:45:23.02ID:5sPb0rLu読み終わるまでSub SpeakAPIから抜けないけどUIは受けるというわけか。
それでニーズは満たすのかもね。
>>558
7でもダメだった
0560デフォルトの名無しさん
2016/06/09(木) 22:14:03.49ID:Nw1jdtR1変数名とか入力値で検索する方法ってないですか?
深い階層に有ったりどの変数に目当ての値が入ってるか曖昧な時にいちいち開くの面倒です
0561デフォルトの名無しさん
2016/06/09(木) 23:00:19.61ID:WOvdLwlE永久ループが怖くて、
無理矢理For Nextを使う俺は小心者。
0562デフォルトの名無しさん
2016/06/09(木) 23:03:31.96ID:ehD8QNF8せっかく用意されてる命令をなぜ使わないの
0563デフォルトの名無しさん
2016/06/09(木) 23:31:40.65ID:usJpFq2/俺もそうだった。ただdoloopってエクセルで使う機会は少ないと思う。
大体はfornext、foreachで事足りる。
ゲームだとdoloopは死ぬほど使うけどね
0564デフォルトの名無しさん
2016/06/09(木) 23:47:41.71ID:zgYGqzoCいいやり方だと思うけど、Set SpV = CreateObject("SAPI.SpVoice")の
SpVって変数の寿命が尽きると読み上げも止まっちゃうみたいだね。
だから別の Sub や Function の中にその "SpeakAPI"を組み込んで使う場合は
Do〜Loop の間は待ちが発生する。
0565デフォルトの名無しさん
2016/06/09(木) 23:58:14.68ID:usJpFq2/そうすればエクセルと同期とか関係なしに再生できると思う
0566デフォルトの名無しさん
2016/06/10(金) 00:16:09.21ID:3rMMNq1l>ゲームだとdoloopは死ぬほど使うけどね
俺もそうだった
今はゲームではどちらもそうそう使わない
0567デフォルトの名無しさん
2016/06/10(金) 00:28:38.18ID:3rMMNq1l音楽ファイルならそんなことしなくてもsndPlaySoundやmciSendStringのAPIで行けると思う
0568555
2016/06/10(金) 03:53:33.12ID:WIrOC41uグローバル変数とかにすればLoop待ちせず完全に非同期に出来るみたいね
…ついでにクラスモジュール化してみた
--- 標準モジュール(テスト用)
Private clsSpv As New SpeechAPI
Sub test()
Call clsSpv.Speak("Hello World")
Call clsSpv.Speak("Speech API Test")
End Sub
--- クラスモジュール(SpeechAPI.cls)
Private Const SVSFlagsAsync = 1 '非同期
Private objSpV As Object
Private Sub Class_Initialize()
Set objSpV = CreateObject("SAPI.SpVoice")
End Sub
Private Sub Class_Terminate()
Call Me.WaitSpeak 'Speak終了前に破棄されそうな場合は待機
Set objSpV = Nothing
End Sub
Sub Speak(SpeakText)
Call objSpV.Speak(SpeakText, SVSFlagsAsync)
End Sub
Sub WaitSpeak()
Do
DoEvents
Loop Until objSpV.WaitUntilDone(10)
End Sub
0569デフォルトの名無しさん
2016/06/10(金) 12:15:48.39ID:EYLL7b//それだとデストラクタで、結局音声がなり終わるまで固まらない?
0570デフォルトの名無しさん
2016/06/10(金) 12:22:38.95ID:4oO9NPCl0571デフォルトの名無しさん
2016/06/10(金) 12:32:42.79ID:EYLL7b//いやいや、音声が 鳴ってる最中に次の処理に進める?
0572デフォルトの名無しさん
2016/06/10(金) 15:33:45.40ID:i706FGHyもしいまWindows7で日本語も対応させるにはどこにいってなにをインストールすればいいのでしょうか?
0573デフォルトの名無しさん
2016/06/10(金) 16:12:49.25ID:4oO9NPCl漢字もかなりこなれた感じで読み上げてくれるよ。
MSSpeach_SR_ja-JP_TELE.msi というものをダウンロードすればいいんだと思うけど...違ったらゴメン
0574デフォルトの名無しさん
2016/06/11(土) 01:47:26.20ID:02ogFup4OS添付のSAPI5じゃなくMicrosoft Speech Platformを使う方法でなら
Microsoft Speech Platform - Runtime (Version 11)
https://www.microsoft.com/en-us/download/details.aspx?id=27225
→ SpeechPlatformRuntime.msi をダウンロード
Microsoft Speech Platform - Runtime Languages (Version 11)
https://www.microsoft.com/en-us/download/details.aspx?id=27224
→ MSSpeech_TTS_ja-JP_Haruka.msi をダウンロード
上記インストールして、コードを以下のように書き換える
Set s = CreateObject("Speech.SpVoice")
s.Speak "helloこんにちは"
※ オブジェクトの仕様はSAPI.SpVoiceとほぼ同じっぽい
※ OS標準のSAPI5用の無料音声合成エンジンは見つけられなかった
Win8以降ならSAPIでも日本語対応しているっぽいけど…
0575デフォルトの名無しさん
2016/06/11(土) 06:26:26.01ID:6cWsIMr7そうなんだ。
Win10だと CreateObject("SAPI.SpVoice") のままでOKなんで油断した。
0576デフォルトの名無しさん
2016/06/13(月) 09:25:34.07ID:8U53ckACAセルとBセルの組合せの重複をチェックしたいのですが、どうやれば良いですか。
今はC列に(C1=A1*21+B1)の作業域を設け、n行が更新されるたびに
If Application.CountIf (Range ("C1:C200"), Cells(n,3)) > 1
とやってますが、少しでも時間短縮を図りたいのです。
つまりわかりやすさよりもスピード重視でお願いしますm(_ _)m
0577デフォルトの名無しさん
2016/06/13(月) 10:22:42.66ID:wX9Pf1Mm0578デフォルトの名無しさん
2016/06/13(月) 12:00:42.36ID:+URgB/tG数字の更新はどうやってるの?WEBクエリ?
頻繁の間隔は具体的にどれぐらい?1分置き?
チェックの結果は人間が目視するだけ?VBAか何かで利用?
0579デフォルトの名無しさん
2016/06/13(月) 12:46:55.80ID:8U53ckACありがとうございます!
フィルターオプション&重複でググって解決しました。
初心者故おかしいかも知れませんが、これで求めるチェックができました。
お陰で、作業域(演算)の分かなりのスピードアップが図れそうです。
Range("a1:b9").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
x = WorksheetFunction.Subtotal(3, Range("a1:a9"))
Range("a1:b9").AdvancedFilter Action:=xlFilterInPlace, Unique:=False
y = WorksheetFunction.Subtotal(3, Range("a1:a9"))
MsgBox y - x
0580デフォルトの名無しさん
2016/06/13(月) 12:56:12.13ID:8U53ckAC求める組合せをループ(バックトラック法)かけて延々と調べるものです。
具体的には4列(A-D)あって、次の4条件のしばりがあります。
A<>C
B<>D
A&B C&D 重複無し
A&D C&B 重複無し
力技で判定していたので、長時間かかって終わりそうになかったもので・・
0581デフォルトの名無しさん
2016/06/13(月) 13:01:37.02ID:8U53ckACAn <> Bn
A&B 組合せ重複無し
Cn <> Dn
C&D 組合せ重複無し
A&B C&D 組合せ重複無し
A&D C&B 組合せ重複無し
0582デフォルトの名無しさん
2016/06/13(月) 13:05:35.50ID:8U53ckACAn <> Cn
A&C 組合せ重複無し
Bn <> Dn
B&D 組合せ重複無し
A&B C&D 組合せ重複無し
A&D C&B 組合せ重複無し
0583デフォルトの名無しさん
2016/06/14(火) 18:25:29.30ID:Z8NdG2eJマクロ使って画像みたいに並べるにはどうすればいいですか?
http://i.imgur.com/v4EXpRy.png
0584デフォルトの名無しさん
2016/06/14(火) 18:32:15.29ID:4vHs6V7m結構めんどくさい。ファイルアップロードしてほしい
コードでは
・結合を解除。しなくていいかもしれない
・数字以外だったらアルファベット「A」を取得。
・A1〜A列最終行までfornextループ。右に書き出していく
・D列以降も同じように処理
って感じだと思う
0585デフォルトの名無しさん
2016/06/14(火) 18:38:15.24ID:9fCSALMIあははは、うちの会社にも画像左みたいな意味不明のデータを作ってドヤ顔するウルトラバカがいるぞww
「データっつうのは一行単位じゃなきゃ使い回しが効かないだろ!」って何度か言ったがバカだから聞く耳を持たん。
0586デフォルトの名無しさん
2016/06/14(火) 18:39:33.60ID:4vHs6V7mそれもかっこ悪い
正規化とか言葉はちゃんと覚えよう
0587デフォルトの名無しさん
2016/06/14(火) 18:41:50.36ID:wwwgAdKUA列を上から下に見ていって
数字だったら3列コピーする
別に配列とかDictionaryとかで
1からA
2からB
4からC
12からD
など、設定しておく
数字を見てABCDなどを選択する
0588デフォルトの名無しさん
2016/06/14(火) 18:43:13.12ID:wwwgAdKURDB用語を使っても知らない人には伝わらない
0589デフォルトの名無しさん
2016/06/14(火) 19:15:10.20ID:e7Hp4H4t0590デフォルトの名無しさん
2016/06/14(火) 19:19:40.65ID:e7Hp4H4t「モデルを軽視しビューばかり気にする馬鹿」とでも呼べばいいだろうか。
0591デフォルトの名無しさん
2016/06/14(火) 19:45:19.02ID:V0YHD+Capass=vba
http://up2.karinto.in/uploader/download/1465901074.zip
0592デフォルトの名無しさん
2016/06/14(火) 20:54:15.20ID:hZWdJI0J0593デフォルトの名無しさん
2016/06/14(火) 21:18:53.56ID:lCHHR3y2データの取り扱いと保存方法についてはしっかりと勉強させるべき。
0594デフォルトの名無しさん
2016/06/14(火) 21:52:42.76ID:8twB5jbW0595デフォルトの名無しさん
2016/06/14(火) 23:43:30.88ID:OpO/Jdo0出すんだけど、そのときにいつも決まったフォルダ(ネットワーク上の
共有フォルダ)を開くのには、どうすればいいでしょう。
Application.DefaultFilePath = "\\hoge\foo"
としてみたけど直前にexelでファイルを読み書きしたフォルダを
開く様子。
0596デフォルトの名無しさん
2016/06/14(火) 23:58:37.04ID:4eYpAyq0ワロタ。
うちの会社にもいるわ。
表より、制作者の頭直したほうがいいレベル。
0597デフォルトの名無しさん
2016/06/15(水) 00:22:05.37ID:HtC2zyr/カレントフォルダを変更しないといけない
普通は ChDriveステートメント & ChDirステートメント でやるけれど
ドライブ文字が割り当てていない ネットワーク上の共有フォルダは これが使えない
ので
CreateObject("WScript.Shell").CurrentDirectory = "\\hoge\foo"
で変更してやるといい
0598デフォルトの名無しさん
2016/06/15(水) 02:03:31.53ID:6oIsBMjlExcel 2002以降なら FileDialog オブジェクトを使う方法もある
Sub file()
With Application.FileDialog(msoFileDialogFilePicker)
.InitialFileName = "c:\windows\temp"
If .Show Then
Debug.Print .SelectedItems(1)
End If
End With
End Sub
0599デフォルトの名無しさん
2016/06/15(水) 08:27:46.14ID:+ULWh3fHExcelは何を持ってViewとするか難しいよな。
コードを組まなくてもシートだけでViewとModelを表現する場合もあるし、
VBAが絡むと「そのシートはView扱いなの?それともファイルみたいに扱えばいいの?」となる場合も少なくない。
0600デフォルトの名無しさん
2016/06/15(水) 11:58:06.33ID:zpa8LNX8あなたが神か…!
こんなにスリムなコードで出来たんですね
因みに何ですが、アルファベットのみたいにSheet1の表のひらがなのセルが塗りつぶしされてる時にそれをSheet2でも適用させるにはどういうコードを書けばいいんでしょうか?
>>585、>>596
いつもこの表作ってるのは俺じゃないんだ…
これ本当は同じシートにもっといろんな表があるんだけど、A4一枚に収まるように見栄えよくしてるんだと思う
0601デフォルトの名無しさん
2016/06/15(水) 12:36:00.33ID:e1ybzWx3元データもらえばいいのに
0602デフォルトの名無しさん
2016/06/15(水) 13:32:16.02ID:RQgSJKk0確かに。
>>600
シート1の色を取得したいセル.Interior.Color で取得しておいて、
シート2の色付けしたいセル.Interior.Color で色付けするとか。
0603585
2016/06/15(水) 18:15:38.34ID:5Km9WBBK>いつもこの表作ってるのは俺じゃないんだ…
>これ本当は同じシートにもっといろんな表があるんだけど、A4一枚に収まるように見栄えよくしてるんだと思う
分かってますよ。あなたを煽っているわけじゃないから気を悪くしないでね。俺はIT音痴なヤツばっか生息している会社勤めで
ランダムレイアウトデータに日々苦しめられているのでつい書いてしまった
0604デフォルトの名無しさん
2016/06/15(水) 19:46:00.51ID:RQgSJKk0そういう表を作る人が、VBAスレに来るわけないもんな。
0605デフォルトの名無しさん
2016/06/15(水) 20:05:56.04ID:wPVjVaLz>>598
ありがとう。バージョンは2007です。試してみます。
0606デフォルトの名無しさん
2016/06/15(水) 20:37:33.45ID:+80x4U05でも自動化すると仕事がなくなってクビになる人が出てくるし、難しい世の中だわ
0607デフォルトの名無しさん
2016/06/15(水) 20:41:38.66ID:JJliNqABs2.Cells(r2, 4).Interior.Color = c.Offset(0, 2).Interior.Color
0608デフォルトの名無しさん
2016/06/16(木) 12:21:47.47ID:z0gRpvpUたまたまDBの様にも使えるというだけで基本はあくまでドキュメント作成ソフトだぞ
0609デフォルトの名無しさん
2016/06/16(木) 12:22:31.90ID:YejbenNI0610デフォルトの名無しさん
2016/06/16(木) 12:28:49.09ID:73wTZmpjdbはAccess
GUIはExcel
これでシステム構築した方がいい
java使うメリットなんてないが使いたいならどうぞ
word()
0611デフォルトの名無しさん
2016/06/16(木) 12:38:28.51ID:q2sS4t3V異才発見
0612デフォルトの名無しさん
2016/06/16(木) 12:38:35.50ID:rAlZkMmbEXCELのfindメソッド使って座標を取得して
その周辺のセルの結合状態調べる処理とか作ったが
やっぱランダムレイアウト作る奴の思考回路は謎過ぎるわ
なぜそれでいいと思ったのか
0613デフォルトの名無しさん
2016/06/16(木) 12:46:12.56ID:wS4QfEJ1殆どの人は細かいことなんて考えてないだろうし
0614デフォルトの名無しさん
2016/06/16(木) 12:48:50.53ID:9J5fQDO0コンピュータで処理する事より
人間(自分)が見易いレイアウトにしてる
もしくは上司がそうしろと言う
0615デフォルトの名無しさん
2016/06/16(木) 12:52:07.68ID:z0gRpvpUプレゼン資料なんて見た目が全てなんだがな
0616デフォルトの名無しさん
2016/06/16(木) 12:53:23.18ID:z0gRpvpUそれが正解
DBが必要ならDB使え
0617デフォルトの名無しさん
2016/06/16(木) 13:05:29.06ID:9J5fQDO0そういう上司や見た目重視の人はDBなんて知らない
見た目重視のデータで作業は他の人に押し付ける
自分の仕事なのに
0618デフォルトの名無しさん
2016/06/16(木) 16:04:06.46ID:by4f3/2N彼等は紙媒体での使い方しか知らないから仕方無いと諦めてる
0619デフォルトの名無しさん
2016/06/16(木) 19:46:10.39ID:R+yX9JZZパスワードで改変防止もできるし
ビューは使いやすいし
0620デフォルトの名無しさん
2016/06/16(木) 20:13:06.79ID:lzPGCcDMって渡したら謎レイアウトにされたことある。
シート保護すべきだったと後悔
0621デフォルトの名無しさん
2016/06/16(木) 20:32:10.43ID:Lrz7vPJw0622デフォルトの名無しさん
2016/06/16(木) 20:32:13.19ID:25qEXxzA使える件
0623デフォルトの名無しさん
2016/06/16(木) 20:34:41.74ID:e7Ja7VI3異才どころかうちの会社にはごろごろいるぞ
ひどい奴はメール本文と同じ内容を Excel に貼り付けて添付してるとか
もう意味わからん w
0624デフォルトの名無しさん
2016/06/16(木) 20:46:00.25ID:kyzxcnkb0625デフォルトの名無しさん
2016/06/16(木) 20:59:48.69ID:acyUZOOZセル結合するなはなしで。
0626デフォルトの名無しさん
2016/06/16(木) 21:07:17.73ID:r7pa0lal0627デフォルトの名無しさん
2016/06/16(木) 21:38:01.20ID:JOmdLZoV0628デフォルトの名無しさん
2016/06/16(木) 21:58:43.49ID:yULI4C1vごちゃごちゃした表を作りたい側からすれば必要なんだろうよ
0629デフォルトの名無しさん
2016/06/16(木) 22:34:35.41ID:/BKKS23Eしっかり仕事しろや僕ちゃん達
0630デフォルトの名無しさん
2016/06/16(木) 22:54:45.53ID:EpEOLr57広義のソフトウェアにはハードウェア以外の全てが含まれるんやで
マニュアルとかな
0631デフォルトの名無しさん
2016/06/16(木) 23:18:24.00ID:Fh8G5flwエクセルはお絵かきソフトですが。
0632デフォルトの名無しさん
2016/06/16(木) 23:38:00.05ID:UZ0NxguP次回のメジャーチェンジのときは本気で
VBA.NetとかC#Aとかになるかも知れんね。
0633デフォルトの名無しさん
2016/06/16(木) 23:43:21.25ID:SaEW/WbJ0634デフォルトの名無しさん
2016/06/16(木) 23:59:16.51ID:+3Mnd4Ftc#なりjavascriptでVBA並にコードかけるようにして欲しいのう
VSTAではなく
0635デフォルトの名無しさん
2016/06/17(金) 00:08:04.83ID:D8ioveLA0636デフォルトの名無しさん
2016/06/17(金) 00:12:56.72ID:fZ1pqYPvドキュメントは一太郎が最強だよ
オレなんか今でも一太郎12をだましだまし使ってる
ATOK含めwin10で使えた時は歓喜の雄叫びをあげたわ
0637デフォルトの名無しさん
2016/06/17(金) 00:21:03.61ID:+XPFuyoA0638デフォルトの名無しさん
2016/06/17(金) 05:38:19.50ID:7+eHqEpfxlsxをzipに変えて圧縮展開したら中身はXMLだったはず
DOMとかSAXで操作できる
0639デフォルトの名無しさん
2016/06/17(金) 06:44:36.61ID:TQ7oR46sドキュメントって文字だけじゃなくて図表とかも含むんだよ
0640デフォルトの名無しさん
2016/06/17(金) 07:36:05.18ID:IsEzxZDcドキュメントであるならwordを使うべき
excelは表計算する為のツールだと何度言えば(ry
アホではwordを使いこなせないし
直感的に出来ないのは分かるが
どうしてもexcelで作りたいなら
excelをwordに埋め込むなりリンク貼り付けすべき
0641デフォルトの名無しさん
2016/06/17(金) 08:58:37.01ID:U+AOa7Cs多分もうワードが標準になることはないと思う
エクセル文書は広まりきってしまった
0642デフォルトの名無しさん
2016/06/17(金) 09:12:40.06ID:l0Z4bZuIこれがMSのコンセプトだと思うが
現実は非情
0643デフォルトの名無しさん
2016/06/17(金) 09:53:31.11ID:sAvpxS6NExcel方眼紙でセル結合したくなったとき
既存の列の幅は決まってるから新規の結合セルの幅も定数といして限定されてるはずだけど
そんなときExcel方眼紙愛好者はどうしてるの?
0644デフォルトの名無しさん
2016/06/17(金) 10:20:19.41ID:eCqNB94c自業自得だ
0645デフォルトの名無しさん
2016/06/17(金) 11:58:11.65ID:qv7ayA9h最初にシート全体を選択して全部の列の幅を1にしてから作業を始めるんだよ
だから方眼紙と言われてる
0646デフォルトの名無しさん
2016/06/17(金) 12:03:59.44ID:Jw6Vo/h3縦横でサイズスケール違うよな
正確な正方形にする方法あるのか?
その辺はアバウトなんだろうが
0647デフォルトの名無しさん
2016/06/17(金) 12:17:36.97ID:3e16czfu正方形w
0648デフォルトの名無しさん
2016/06/17(金) 12:19:03.31ID:1KfIG+A8画面上で正方形にしても印刷するとズレるし、縦長の方がきめ細かい表が作りやすいとか色々ある
0649デフォルトの名無しさん
2016/06/17(金) 12:21:35.03ID:ToEAATWKそんなもん好きにしろよ
お前は一から十まで教わった通りにしか出来んのかw
0650デフォルトの名無しさん
2016/06/17(金) 12:21:48.50ID:deEjLyQb0651デフォルトの名無しさん
2016/06/17(金) 12:22:52.27ID:U+AOa7Csずれるんだな、これが
0652デフォルトの名無しさん
2016/06/17(金) 12:31:22.93ID:Q7mFcet+それはテンプレートの統一性が当然と言うデータを扱う人の発想だな
方眼紙使いはデータとして使う事を考慮してないから、例えば発注書でも形に合わせたテンプレートもどきをその数だけ作るんだよ
0653デフォルトの名無しさん
2016/06/17(金) 13:12:01.79ID:Yteqqpsz0654デフォルトの名無しさん
2016/06/17(金) 13:33:39.44ID:U+AOa7Cs・・・と思ってたけど俺が甘いのか?
本当に正方形にするの?なんだったら1mm間隔にしてから痕で結合して使ったりするの?
0655デフォルトの名無しさん
2016/06/17(金) 14:15:41.36ID:egnJxC/Wなんか別の作業で労力使い果たしているようなドキュメが多い。
0656デフォルトの名無しさん
2016/06/17(金) 14:22:36.95ID:eCqNB94c入力にするやつは死刑だ
■ このスレッドは過去ログ倉庫に格納されています