Excel VBA 質問スレ Part62

■ このスレッドは過去ログ倉庫に格納されています
1
垢版 |
2019/06/24(月) 00:21:37.48
!extend:checked:vvvvv:1000:512

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part61
http://mevius.5ch.net/test/read.cgi/tech/1556203263/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/07/27(土) 17:37:41.95ID:hapzpDWL0
>>507
スレチ
https://mevius.5ch.net/test/read.cgi/bsoft/1556754363/
2019/07/27(土) 17:39:32.12ID:0zw3343k0
>508
そうです。でも全てバツが入ってました…。
返却されたプリントに、"セル番地(F10)についてここのみで記します"と書いてありました。
自分には意味がさっぱりですが何か分かりませんか?
511デフォルトの名無しさん (ワッチョイ 8a02-tP4r)
垢版 |
2019/07/27(土) 17:52:14.66ID:elOLq8oK0
VBAのフォームのテキストボックス内のフォントサイズが場所によってまちまちなんですが、
どうしたら統一できるでしょうか?
因みに、
テキストボックスのプロパティ(フォント名、フォントサイズ、ボックス高さ)はすべて統一しています。
https://uploader.xzy.pw/upload/20190727174533_466d653379.png
2019/07/27(土) 17:55:18.22ID:0zw3343k0
”ここの外で記します”と書いてあるかも知れないです。先生の字が汚くて読めない…
セル番地(F10)について、ここの外で記します。と書いてあるのでそれがヒントになってると思うのですが。

これを踏まえた上で>>507の解答お願いいたしますm(_ _)m
2019/07/27(土) 17:57:54.34ID:hapzpDWL0
>>511
サイズ違うやつって全角じゃないの?
2019/07/27(土) 18:04:51.46ID:nw7YuAgg0
>>510
このスレをその教師に見せろ
その教師は無能でアホだから何も分かっていない

'以下、その教師に当てる連絡

テメーより何十年も現場で使い倒してる連中が全員正解と言っている
つまらないルールがあるならそれを書け、聞いてやった上で正解を出してやるから書き込め

'連絡、ここまで
2019/07/27(土) 18:04:53.29ID:zfEkdoko0
スレ違いだっていわれてんのになめてんのか?
516デフォルトの名無しさん (ワッチョイ a38e-SsL+)
垢版 |
2019/07/27(土) 18:05:26.47ID:0I7B0fTa0
>>512
死ねや、クズ
2019/07/27(土) 18:06:41.53ID:nw7YuAgg0
>>512
字が汚くて読めないなら聞け
それで何かあれば全部お前の責任だ

>>516
殺すのは簡単だがもう少し成長させろ
2019/07/27(土) 18:08:26.65ID:nw7YuAgg0
>>512
お前みたいなゴミクズが言われたままに従うから教師がつけあがるんだよ
教師に「指示に従いたいが何書いてるか分からないから従えない」
といえば100%回答する
わかるまで聞け
2019/07/27(土) 18:11:07.39ID:X/lrVnpNd
>>514
ここ学校の連絡掲示板じゃないんで
2019/07/27(土) 18:13:50.95ID:nw7YuAgg0
>>519
ここで良い
いいから見せろ
ここでなければ教師は切り取って「あー一部がほえてるだけだHAHAHA」なんていうだけだろう
2019/07/27(土) 18:16:51.94ID:kP1N8Rftd
>>520
スレタイが理解できないなら仕方ないな
2019/07/27(土) 18:51:44.04ID:elOLq8oK0
>>513
数字はすべて全角です
2019/07/27(土) 18:57:28.77ID:1cAkezH+0
>>522
全角やめたほうがいいよ
数字としてプログラムが処理できない

使うとしたらフォトショでクリエイティブな作品を作るときぐらい
2019/07/27(土) 19:03:45.50ID:hapzpDWL0
>>522
ほんとに統一されてるか?されてないから違うんじゃないか?
2019/07/27(土) 23:59:06.49ID:eS9QWMI/M
>>511
どうでもいいかもしれんが、何でシートでやらんの
面倒いだけじゃない
526デフォルトの名無しさん (ワッチョイ 0a2f-aoqV)
垢版 |
2019/07/28(日) 04:39:33.47ID:rLjNQrfA0
>>508
列の合計で。C10:E10が正解って落ちなんじゃ
2019/07/28(日) 09:32:44.25ID:Ao5MhP5V0
> セル番地(F10)を
つまり「$F10, F$10, $F$10」が答えってオチ?
2019/07/28(日) 09:54:38.87ID:UXTeVNdOd
>>527
俺はそう解釈したが。
むしろCとかEとか何処から出てきたん
2019/07/28(日) 12:28:22.02ID:Ln2vM5+c0
>>526
単価バラバラの個数集計して何をしたいんだ?
530デフォルトの名無しさん (ワッチョイ 068c-0v1+)
垢版 |
2019/07/28(日) 15:40:47.61ID:9CPL8aqE0
>>507
>>512
”ここの外で記します”だから
F10以外のセルに記する
すなわちF10以外のセルからF10を参照するにはどのように書けばいいかということじゃない?
1. $F10
2. F$10
3. $F$10
2019/07/28(日) 15:44:43.68ID:sZg+ZdsB0
>>493
Adobe PDF Reader コントロールです。
2019/07/28(日) 16:34:10.62ID:19w4dfv20
>>531
Excelのバージョン違うけど俺も同じエラー出たからWebBrowserコントロールで表示させた
2019/07/29(月) 21:45:38.25ID:CSar0obtd
https://i.imgur.com/7ssVURS.jpg
2019/07/30(火) 10:04:06.46ID:/sOZLFOB0
for i = 2 to 6
Sheet1.Range(cells(i, 1), cells(i, 7)).Value = Sheet3.Range(cells(2, 1), cells(2, 7)).Value
next i
これがエラー吐くんですがどうしてだかわかりますか?
なおコードは簡略化してあります。エラーが出るところだけピックアップしてみました。
2019/07/30(火) 10:21:39.52ID:RYwsY7rK0
セルの結合などで配列が作れないとか?
2019/07/30(火) 10:27:09.85ID:/sOZLFOB0
セルの結合はしてないです
2019/07/30(火) 10:38:34.52ID:7eiKBQzd0
cellsにもシート指定する
2019/07/30(火) 10:56:49.73ID:/sOZLFOB0
流石です。できました!
2019/07/30(火) 11:21:54.97ID:/sOZLFOB0
もうひとつ質問です。
エクセルは24時を越える時間をセルに入力するとセルの頭に1900/1/1とついてしまいますがこれを消す方法はないでしょうか。
具体的には
Range("d2").Value = DateAdd("s", 14405 * (cells(2, 7).Value + 1), cells(2, 3))
とやって4時間の倍数を計算したとき24時を越えると時間の前に1900/1/1がついてしまいます。
これがついたときこの1900/1/1の部分を消したいのです。
例えばright関数を使って右の時間の部分だけとろうとしてもシリアル値がコピーされるのか、上手く行きません。
2019/07/30(火) 11:25:40.51ID:/sOZLFOB0
なお書式設定でhh:mm:;ssとしているので見かけ上はちゃんと時間だけ表示されます。
この時間をソートしたとき頭に1900/1/1がついた時間が後ろに回りこんで困っています。
2019/07/30(火) 12:41:51.17ID:q4AvHDZpM
>>54
> この時間をソートしたとき頭に1900/1/1がついた時間が後ろに回りこんで困っています。
そりゃ24時間超えてるんだから下に来るのは当たり前
取り敢えず簡単にやるなら
Range("d2").Value = Mod(DateAdd("s", 14405 * (cells(2, 7).Value + 1), cells(2, 3)), 1)
の様にして少数部だけにすればいい
ちゃんと知りたいなら
Excel シリアル値
あたりでググってくれ
2019/07/30(火) 19:06:59.93ID:WgMpTdZUd
どれも初心者が陥る有りがちな罠。
中級者以上なら皆知ってる。
2019/07/30(火) 19:48:55.40ID:/sOZLFOB0
>>541
mod関数を使って余りを求める発想は恐れ入りました。
しかし、コピペで上手く動作しなかったので、シリアル値が1以上だと表示されることに注目して
if文を使って1以上ならシリアル値から−1するようにコードを書き換えました。
今のところ上手く動いてますがmod関数を使った余りを求める方法のほうが遥かにスマートなので
試行錯誤しながらmod関数を取り入れてみたいと思います。
ありがとうございました!
2019/07/30(火) 20:02:47.84ID:q4AvHDZpM
>>543
まあ本来modとか剰余とかは整数にしか定義されてないからExcelがちょっと異常だと思ってた方がいいと思うよ
2019/07/30(火) 20:27:28.12ID:AKu0TaFKM
>>544
IEEEの剰余演算知らないのか
素人丸出しだな
2019/07/31(水) 06:47:02.32ID:xZH8peU8M
すきあらばマウンティングとかw
2019/07/31(水) 07:02:37.78ID:Pk+8r5fC0
マウント関数
2019/07/31(水) 13:15:14.27ID:d2gdTfTi0
>>532
やっぱりそうなりますか。
僕も代替策でWebBrowser使ってるのですが、こういうの気持ち悪くて。
WebBrowserだと印刷とか拡大のボタン出てきちゃうし。
2019/07/31(水) 22:27:47.84ID:bMN05+Sd0
時間を24以上にしたいなら
表示形式で[hh]:mmみたいに角括弧つける方法もある
2019/08/01(木) 06:52:12.88ID:dXXftso1M
>>549
ソートするとおかしいと言ってるからそれ関係ない
>>545とかもそうだがチンケな知識自慢はウザイだけ
2019/08/01(木) 22:46:09.22ID:DllCcR/k0
時刻が昇順に見えなくておかしいなら[hh]:mmで昇順に見えるよ
2019/08/01(木) 23:23:27.20ID:nCBAvKB70
コールバック関数をどういう状況で使うのか分からないんですけど、
↓こんな状況で使う、で合ってますか?

Sub Test()

 この中で、関数Aを実行したい場合と、関数Bを実行したい場合がある。
 If文で、関数Aと関数Bを分岐するのは嫌。

End Sub
2019/08/01(木) 23:25:07.45ID:i4bRK0c30
今すぐ実行しないけど、何を呼ぶかは今決めておきたい時
2019/08/02(金) 00:58:24.36ID:EdsLlVlVa
依存関係を逆転するんだよ
AがBを呼ぶ場合、普通はAがBに依存するだろ?
コールバックやインターフェイスを使うことで、AがBに依存しないままでBを呼ぶことができる
それによりAを変更することなくBを別の実装Cに差し替えることが可能になり、Aの再利用性が高まる
まあVBAにはそんな小難しい概念は全く必要ないから忘れていい
2019/08/02(金) 06:30:07.60ID:8FKwQRXt0
コールバックは非同期だとめちゃくちゃ便利だけどvbaみたいに一本の処理が続く言語ではあんまり意味が無い
独自関数のイベントハンドラすら無いなら尚更
2019/08/02(金) 13:06:20.71ID:CGHTW3BLd
コールバックは非常に重要なんだけどVBAで出てくるのはサブクラスやフックなんかの高度な話の時や、コールバック使用を前提とするWin32APIの時だな。
2019/08/04(日) 15:16:30.47ID:5ZS1G+AH0
・Microsoft HTML Object Library
・Microsoft Internet Controls
これらを参照したプログラムを社内で組んで使っています。

ベースとなるIE上のページにあるいくつかのリンク先から必要な情報を
とりだしてワークシートに並べるだけの単純なものです

これまでWindows7(64bit)+Excel2010だったのですが
Windows10+Excel2016に近々移行するという話が出ています

そのまま使い続けられたらいいなと思っているのですが、
何か明らかに問題となるような事項はご存じでしょうか?

自分で組んだものなので、修正はできるのですが、アクセスしにくい場所にあるので
事前に知っておくことができれば対応しやすいなと思っています
2019/08/04(日) 15:50:09.98ID:VJisWwvJ0
>>557
Win10+IEでは、IEのプロセスがしばらく消えなかったり、読み込み完了してもReadyStateがきちんと変化しなかったりで、移行にはかなり苦労すると思われる
俺はすごく苦労した
2019/08/04(日) 17:49:24.07ID:5ZS1G+AH0
>>558
その辺は移行後じゃないと分からなさそうですね
一旦使用中止した上で確認することも考えます
ありがとうございます
2019/08/04(日) 18:18:52.51ID:wM8jMXaC0
IEオブジェクトはそろそろやめた方が良いね
2019/08/04(日) 18:58:46.79ID:6Wul5V0eM
読み込み完了を確実に知る手段がないからなReadyStateあてにならないし
2019/08/04(日) 19:10:37.00ID:wM8jMXaC0
ajaxがあるともう無理
2019/08/04(日) 19:47:17.29ID:VJisWwvJ0
>>561
実は方法はあるんだけど、あんまりスマートじゃないんで他人の使うアプリでは採用しづらい
2019/08/04(日) 21:08:59.72ID:ct85luz10
On Error〜 と Do Loop ?
2019/08/04(日) 21:21:12.54ID:wM8jMXaC0
doloopで取得する方法って無限ループになりそうで怖い
2019/08/04(日) 23:22:30.08ID:wIzeuvQb0
Excelでソースを見られないようにする方法はありますか?
プロジェクトのパスワードはすぐに突破されるので
2019/08/04(日) 23:24:28.94ID:wM8jMXaC0
無いよ
2019/08/04(日) 23:25:56.68ID:wM8jMXaC0
と思ったけどスマン
dllにして読み込む形なら結構行けるんじゃないかと思った
5691=”ー1”、Null=”” (ワッチョイ f5ad-zwOC)
垢版 |
2019/08/05(月) 02:53:35.25ID:nP4zzQcy0
見た目比較、柔らか比較、直観比較、なんて言うんでしょうね?
どうググればいいのか
スレチなのかどうか
VBAに限らず、C#でも結局、空文字連結が最良だった印象
でも問題にしたい基本はExcel VBA

 If A & ””=B & ”” Then

というのは、数字を1セルずつ入力すると数値になるけど、配列でまとめて入れると文字になったり
でも単純に「1」なら「1」なのだとしたい場合

ちなみにCStrはNullでエラーになるので&””の方が便利
便利だけでなく、速度も圧倒的に&””の方が速い
(ちなみにセルのTextプロパティもめっちゃ遅い)

ちなみにセルをString変数に代入してから比較する方が、&””より1〜2割速い
セルにNullを入力しても空文字になるので、セル側には使える
でも用途限定&ソース増えるので、よほどの大量処理で困らない限り、一般的には&””が安定かな

でも昔、「なんで空文字連結してるの?」って誰かに怒られたことがあり、なんとなく後ろめたい
でもテストを重ねるうちに例外に気付き、最初からやっときゃ良かったじゃんとなる

どうなんですかね?
2019/08/05(月) 02:54:38.57ID:nP4zzQcy0
あれ、1=”ー1”ってなんだw
1=”1”ね
2019/08/05(月) 06:35:19.95ID:fZ1grq280
>>569
型変換のために空文字列を連結したり0を足すのは、ワークシート上ではよくやるけどVBAでは避けた方がいい
セルの表示内容を文字列で欲しい時はTextプロパティを使うのがセオリーだし、自分でも書いてるけどString型の変数に代入するべき
2019/08/05(月) 09:21:52.72ID:DamzU/6ud
>>571
Textプロパティは使わねえな。
2019/08/05(月) 11:48:01.13ID:9MgYLk7e0
>>558横からすみません
すごく苦労した部分の詳細や対応策を教えていただけないでしょうか
2019/08/05(月) 13:25:50.95ID:fZ1grq280
>>573
俺が試行錯誤の末に発見したのは、IEオブジェクトのVisibleプロパティが変化するとReadyStateが更新される、ということ
だから

objIE.Visible = False
objIE.Visible = True

という2行を読み込み完了チェックのループに挿入した
あと、IEが非アクティブになるとエラーで止まることがあるので、マクロ実行中は一切さわってはいけないという制約まで付く
ここまでやって、画面がものすごい勢いで点滅するけど、一応の結果は得られるようになった
あと、Win10の次の大型アップデートでIEの動作がまた変わるかも知れないので、いつまでも使える保証がない

JavaScriptやcookieやセッションの管理などが必要なければXMLHTTPを使った方が簡単で確実
575デフォルトの名無しさん (ワッチョイ 75f1-xVkp)
垢版 |
2019/08/05(月) 14:36:12.11ID:RvbOnux20
タブブラウザで新しいタブに追加する方法はあれから発明されましたか?
2019/08/05(月) 16:28:51.96ID:9MgYLk7e0
>>574さん
ありがとうございます

すごい参考になりました
時々ReadyStateが更新されずDo-Loop抜けずに困っていました
577デフォルトの名無しさん (スッップ Sd43-nSnx)
垢版 |
2019/08/05(月) 18:35:15.20ID:nHSuKmq3d
今でもIEなんて使ってるのお前らだけだろ
あんたの会社はセキュリティとか気にしないんだね
2019/08/05(月) 18:46:21.41ID:u4C0UjsS0
>ここまでやって、画面がものすごい勢いで点滅する
なると思ったけどやっぱりなるんだ

>>577
ブラウザの解釈が必要なところはどうしてもあるんだよ
ただのスクレイピングでいいなら色々な方法があるけどやっぱりキツイ
2019/08/05(月) 19:20:06.57ID:VaXANPIk0
textプロパティ遅いからデータ量が多くない時しか使えない
2019/08/05(月) 19:34:11.66ID:VaXANPIk0
>>569
セルに数字入れたら文字になるというのは、RangeのValueに入れてるからとかでは
2019/08/05(月) 19:55:00.01ID:u4C0UjsS0
>>569
自分一人しか見ないならどっちでも良いよ
他の人への見やすさを考えると関数の方が良い
文字列連結で考えられるのは
・仕様を検索し辛い。str()なら一発で見つかるが、文字列連結によるエラーなどはどう探していいのか分からん
・そもそも何をしているのかも分かりづらい。本来は文字列を入れるつもりだったようにも見える
・この記述でどういうエラーや分岐が発生するか不明。nullやDATE型が入ってる場合など

見た目比較
tostring = Str(1)
tostring = 1 & ""

どうしても使いたいならコメントをつけるなどした方が以下も知れないけどこれもアホらしいな
tostring = 1 & "" '文字列化
2019/08/05(月) 20:12:10.62ID:VaXANPIk0
str(1)は"1"にならない
strは符号付文字列化だから
2019/08/05(月) 20:48:05.94ID:u4C0UjsS0
あぁCstrじゃないとダメなんだっけ
ずっと忘れてたわありがとう
今までのコードかなり間違えてる気がする
2019/08/05(月) 20:55:56.77ID:bZJ9L0Ead
良く使う文字列変数名ってみんなどんな?
2019/08/05(月) 21:21:35.78ID:u4C0UjsS0
名前やら住所やら普通に2バイト変数名使いまくる
2019/08/05(月) 21:29:12.71ID:VaXANPIk0
>>584
ちょっとしたテスト用ならs
それ以外は何の文字列かがわかる名前
2019/08/05(月) 21:48:48.29ID:9MgYLk7e0
>>577
IEの代わりに何を使っているのですか?
2019/08/05(月) 22:39:27.27ID:eFIMT7Jx0
仮にIE使えなくなったら、どうすりゃいいんだろう?
UIAutomationでも使うの?
2019/08/05(月) 23:06:57.61ID:fZ1grq280
>>588
原理上は、EdgeでもChromeでもどんなブラウザでもVBAや外部アプリから操作できる
あとは必要なライブラリのインストールが許可されるかどうかで決まる

とりあえずEdgeは簡単にコントロールできるよ
https://www.ka-net.org/blog/?p=6018
590デフォルトの名無しさん (ワッチョイ 75f1-xVkp)
垢版 |
2019/08/05(月) 23:11:08.42ID:RvbOnux20
タブブラウザで新しいタブに追加する方法はあれから発明されましたか?
2019/08/05(月) 23:14:43.05ID:u4C0UjsS0
>>590
その操作必要?
二つオブジェクト作れば良いと思うけど、ダメなのか
592デフォルトの名無しさん (ワッチョイ 75f1-xVkp)
垢版 |
2019/08/05(月) 23:41:12.85ID:RvbOnux20
ウインドウが二つになってしまうんですよ。タブじゃなく。
2019/08/06(火) 01:47:40.96ID:jLnmJ2DC0
DOSは演算子で分かれてるんだよな
==は文字、EQUは数値
&””が高速なら、専用演算子があればもっと高速になるような
ちなみにStrCompも遅いし、Nullはエラーになる

ちなみにDOSもNull問題と似たような<ECHO は OFFです。>問題があって、
やはり”%HOGE%”==””みたいな、文字連結しながらが標準
2019/08/06(火) 01:52:00.75ID:nCnvS7DE0
echo.%abc%
2019/08/06(火) 05:36:32.23ID:GHPQhf970
全角英数字やめようよ
2019/08/06(火) 07:12:51.81ID:vRSgvXkj0
>>589
あまりにコードが長いので、Pythonにするわ。
597デフォルトの名無しさん (ワッチョイ 75f1-xVkp)
垢版 |
2019/08/06(火) 10:15:51.32ID:AyLoeOe80
タブブラウザで新しいタブに追加する方法はあれから発明されましたか?
598デフォルトの名無しさん (ワッチョイ ad7c-nSnx)
垢版 |
2019/08/06(火) 11:43:42.12ID:fqxmaW9H0
VBAからJavascriptを操作
2019/08/06(火) 12:11:42.24ID:ANeL+6+I0
>>595
半角カタカナもな・・・
2019/08/06(火) 19:08:40.09ID:kWi2YXzG0
zenkaku mojimo yameyouze
2019/08/06(火) 22:24:53.84ID:nCnvS7DE0
Win95のハンカクからゼンカクになった時はえらく間抜けに見えたものだ
2019/08/06(火) 22:44:49.97ID:Uq1zh0Vl0
?
2019/08/07(水) 23:19:02.03ID:OP2ywupH0
JSObjectのaddAnnotで、PDFに注釈付けてるんだけど、
getProps → プロパティ変更 → setPropsで、
何故かtextSizeだけが反映されない。
他の、strokeColorやcontentsは反映されるのに。
何でだろう?
エラーも出ないし。
直接setPropsなら設定出来そうなんだけど、
引数の順番がわからん。
2019/08/07(水) 23:21:30.53ID:OP2ywupH0
↑ちなみに、typeとtextSizeを同時に設定しようとすると、サポートされていない云々のエラーが出るので、
先にtypeを設定してからtextSizeを設定するようにしてる。
2019/08/07(水) 23:49:11.47ID:OP2ywupH0
↑解決はしてないんだけど、おそらくこれしか無いだろうと思われる答えを見つけたので、一応自己解決。

ググったら、海外でも同じ現象が起きている人が何人かいて、
自動翻訳を頼りに調べたら、「そこだけJavascriptで書け」ってのが答えらしい。

なんでだよwwww
2019/08/09(金) 02:28:12.10ID:Sa/tT/Cw0
マウスが滑って列幅やグラフをいつのまにかズラしてしまう心配

ActiveSheet.Protect Contents:=False, UserInterfaceOnly:=True
どうも、Contents:=True にしないと列幅固定できない様子

でも Contents:=False にしないと、
ActiveChart.Axes(xlValue).MaximumScale = 100
こういうのでエラーになる
(DrawingObjects:=True は関係ないっぽい)

とりあず Contents:=False でグラフのズレだけは防止できるので列幅は諦め中
Workbook_SheetActivate で保持して Workbook_SheetDeactivate で戻すとか
そういうことはなんとなくやっちゃいけない気がする
2019/08/09(金) 22:26:35.64ID:6C2oLUnF0
グラフはなぁ・・。
間にDoEvents挟むと収まる謎のエラーとか、ワケワカラン。
2019/08/09(金) 22:39:48.74ID:HA0wV+Cx0
DoEventsはExcelでなんか処理がたまってメモリが爆発するのを回避してるんだろうなぁとかポインタが暴発してるのかなぁとかふんわりと考えている
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況