Excel VBA 質問スレ Part72

■ このスレッドは過去ログ倉庫に格納されています
2021/07/18(日) 08:42:15.37ID:KskL7bEXd
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ

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

※前スレ
Excel VBA 質問スレ Part70
https://mevius.5ch.net/test/read.cgi/tech/1616072923/
Excel VBA 質問スレ Part71
https://mevius.5ch.net/test/read.cgi/tech/1621914481/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/07/28(水) 01:31:52.64ID:Ky1rxZdm0
>>297
VBA代替がない限りその説は苦しくないか?
2021/07/28(水) 05:47:03.47ID:FMiGC/5E0
>>304
SQL Server Management Studio使えばインポートできるけど、VBAスレで聞くと言うことは違うか
2021/07/28(水) 07:33:21.04ID:ogvMN+9Q0
確かに
308デフォルトの名無しさん (アウウィフ FF5d-Hgw+)
垢版 |
2021/07/28(水) 10:37:52.45ID:I0vZ6ZDJF
エクセル側からエクセルにあるデータをエクスポート

なら答えられるけど
2021/07/28(水) 12:24:20.53ID:+C1a7ZjYM
>>289
属人化はダメだけど属人化の塊のマクロは使わせろってどういうことだ
矛盾してるだろ


ってアホに言ってみてくれよ
どうせ屁理屈と罵倒で誤魔化すタイプなんだろうけど
どう返答するか興味ある
2021/07/28(水) 21:46:44.12ID:DwPtwRV40
>>304
速度求めないならVBAからADODBとかでSQL-Serverに接続してひたすらデータをinsertすればいいかと
https://itsakura.com/excel-vba-sqlserver-insert
速度求められたらSQL-Serverがアクセスできる場所にcsvで保存してbulk insertかなぁ
https://docs.microsoft.com/ja-jp/sql/t-sql/statements/bulk-insert-transact-sql
311デフォルトの名無しさん (ワッチョイ fba4-NGUt)
垢版 |
2021/07/29(木) 00:37:05.63ID:5P0jxKPl0
プログラム経験もなく新しくvbaの勉強を始めたのですが学習にオススメのサイトはありますか?
今まではやりたい事を探してコピペして作ってたのですが、
自分で書こうとしたらシート名やインデックスやオブジェクト名やらが違うことに気づいて困惑しているレベルです
みなさんが使ったものやわかりやすい参考書やサイトがあれば教えてください
312デフォルトの名無しさん (ワッチョイ 118e-ogEw)
垢版 |
2021/07/29(木) 01:48:58.35ID:qJ9+RPMT0
>>311
君のレベルなら、「よいこ」とか「めばえ」かな
2021/07/29(木) 04:50:12.68ID:tInYj70a0
>>311
最初はでかい本屋行って立ち読みしてわかりやすそうなの選んで買ったわ
その後はアマゾンで適当に評判いいのを選んで買った
辞書代わりに調べるのはネットでいいけど
体系的にちゃんと理解するには本かな
おれは何冊か買って読んだ
VBAは学習者が多いから本も充実してて勉強しやすいよ
俺が始めたのは何年も前だから今出てる本買ったらいいと思うわ
2021/07/29(木) 08:28:17.88ID:qje0bdaJ0
>>311
ない
しいて言えばマイクロソフトのヘルプ
上級者はヘルプ見て解決している
2021/07/29(木) 08:58:17.59ID:1hQ5YU2Kd
>>311
基礎をyoutubeで見て覚えて
関数(vlookupとか)を自作してみるとかなり学べるよ
2021/07/29(木) 09:17:05.41ID:KHPuP3g90
まずは1枚のシート操作だけで完結するものから作ればいい
〇〇の集計とか〇〇の抽出とかね

でも大抵1枚のシート操作だけしかしないものって関数やピボットテーブルでもできたりするので、その感覚もわかっておくとExcel全般に強くなっていいよ
317デフォルトの名無しさん (ラクッペペ MMeb-iYJ6)
垢版 |
2021/07/29(木) 11:41:13.92ID:tRu2KZQaM
よくある、何がわからないのかが分からないと言う奴だね
2021/07/29(木) 11:48:06.66ID:uh8iBAiRM
マクロの記録で作成されたコードを解読する
2021/07/29(木) 11:59:17.77ID:tRfdKqE2a
自分に合ったサイトや本を自力で見つけられないようじゃ
そこまでの事しかできないでおわり
320デフォルトの名無しさん (アウアウアー Sa8b-NGUt)
垢版 |
2021/07/29(木) 13:38:20.23ID:e5dLz96Qa
>>319
迷ったら出来る人に聞いて即やってみる
学習の最適解だよ

基礎学習レベルに才能は関係ない
もし教材探しも勉強って言いたいなら効率悪いよ

>>311
エクセルの真髄100本ノック
コードもあるし参考になる
シートとワークシートの違いとか初心者が気になる事も書いて有る
細い疑問点が残るのは気持ち悪いけど、今は習うより慣れろ
2021/07/29(木) 15:05:38.21ID:pwjhwPgXa
そうやって教えてもたぶん読まないよ
2021/07/29(木) 15:07:10.72ID:pbMKJSnE0
トレーナーは口を揃えて「ヘルプ見ろ」という
だからヘルプ最強
323デフォルトの名無しさん (エムゾネ FF33-Hgw+)
垢版 |
2021/07/29(木) 17:04:51.77ID:32nRf9uoF
>>318
最初はそれで良いかも知れないが
マクロが吐くコードって無駄が多過ぎて無理
324デフォルトの名無しさん (テテンテンテン MMeb-TIaQ)
垢版 |
2021/07/29(木) 17:33:28.86ID:yKiDVYkeM
マクロ記録だと分岐とかループが出ないよね
2021/07/29(木) 18:53:26.13ID:5dr8dF92M
マクロはwithのせいでぐちゃぐちゃな上に
無駄なコードが死ぬほどついてくるから初心者の解読には向かない
326デフォルトの名無しさん (ワッチョイ 4901-bSA8)
垢版 |
2021/07/29(木) 19:47:25.20ID:2QmJme0a0
それ以前に、MS言語を避けるべき。
2021/07/29(木) 20:08:39.08ID:1hQ5YU2Kd
初めてピボットテーブルのマクロ記録を見た時は冷や汗をかいたな
マクロ記録から攻略するのはやめたほうがいい
2021/07/29(木) 20:21:16.09ID:zVCmdr7a0
ピボットの自動記録は酷いな
一行で済むところが20行ぐらいになる
罫線もそんなだったような
2021/07/29(木) 20:36:06.86ID:ImacXrDI0
>>311
会社にあった参考書とエクセルの神髄で勉強した
困ったときはインストラクターのネタ帳
クラス使うようになったらthomのブログ
2021/07/29(木) 21:05:47.52ID:KHPuP3g90
マジでピボットの記録は正気の沙汰じゃないよな

あと、普通の記録だとSelectとSelectionが余分なのに初心者はそれを使うのが最適だと思っちゃうからダメ

さらに図形とかのObjectとかのTextRangeだとマクロ記録のSelection省略しただけじゃうまく動かなくて混乱するし

あとは他でも言われてるようにIfとかAndとかOrとかLoopとか変数とか学べないしね
2021/07/29(木) 21:14:45.50ID:ddohEedh0
>>326
そういう人はVBAスレから去るべき
2021/07/29(木) 23:42:59.81ID:1PJWae7Yd
>>331
まじこれ
Excel使いながらベンダーロックとか騒いでるのが爆笑なんだがww
黙ってGoogleスプレッドシートでも使いながらGoogleにロックされてろよww
2021/07/29(木) 23:51:41.95ID:p4SukJyH0
ExcelVBA MS言語
ACCESSVBA MS言語
Python MS言語
VB.NET MS言語
C# MS言語
C/C++ 準MS言語

Ruby 松本言語
PHP 公式な規格なし。事実上の私言語。Rubyと同格
Perl オワコン

JavaやGOはじめほかの言語もだいたいGoogleやその他企業の私物

ベンダーロックされない言語などあるのだろうか?
むしろ国際規格をきっちり定めているMS言語はもはやベンダーアンロックではないか?
2021/07/29(木) 23:58:22.70ID:zVCmdr7a0
>>333
国際規格で草
その国際規格を制定するメンバーは大抵intelやmicrosoftなどの大手企業
html5に至っては消滅したわ
2021/07/30(金) 00:35:30.86ID:4LnMwhZSM
国際標準ならECMAやISO、日本標準ならJIS
336デフォルトの名無しさん (ワッチョイ 5d01-By/s)
垢版 |
2021/07/30(金) 04:01:44.41ID:AGz2ssQM0
ヒキニートの言う事より、あわしろ氏を信じる。
2021/07/30(金) 13:35:36.57ID:F+iyq/jq0
そりゃニートは潤沢に時間があるからいくらでも勉強し放題だしな
詳しいわけだな
2021/07/30(金) 13:55:06.34ID:egyKewAD0
>>334
そう、つまりMS言語は国際規格になっているのでベンダーロックインはあり得ないということ
逆にRubyは国際規格ではないし開発者が勝手に仕様を頻繁に変更する
これは今までに実績があるし本人が言ってる事
さらに言えばRubyはRailsがあってこそ初めて成り立つ開発言語
言語仕様からコンパイラ、エディタ、ドキュメント、サポートまで全て一社でサポートしているMSとは比べようもないリスクがある

Javaを見ただろうか?
MS言語ではないばかりにあんな事になっている
Rubyを見ただろうか?
バージョンアップごとに対応作業に追われている
しかもRubyの変更とRailsの変更で2倍の対応工数をとられる

MS言語はVB6(1991年発売)が今でも第一線で働いている
ExcelVBA(1993年)なんてここ数年でさらに盛り上がりを見せている
もっとさかのぼると1980年代にはBASICは今とかなり近い文法が完成されており
1985年のQuickBASICに至ってはほぼ今のVBと変わらぬ開発環境を整えており36年にわたって同じ開発環境が通用していることを示している

移り変わりの激しいIT業界で36年だ!それがMS言語の息の長さであり変わらぬことの強さなんだ

MS言語を信じなさい。MS言語に導かれよ!!
2021/07/30(金) 14:00:09.98ID:omgprq0F0
>>338
あー
だからRubyってあんなに年収やっすいんだね
2021/07/30(金) 14:09:56.93ID:eptPeGDTM
国際規格じゃなくて
デファクトスタンダードな
341デフォルトの名無しさん (ワッチョイ 4ea4-qtbA)
垢版 |
2021/07/30(金) 19:01:26.28ID:L6BL7yno0
レンジ上で足し合わせて入力はできないのでしょうか?
range(c1:c2)=range(a1:a2)+range(b1:b2)
だとエラーになってしまいます

range(c1:c2)=range(a1:a2)
これはできますが…
2021/07/30(金) 19:49:10.10ID:XTDmAoXAa
Valueの概念をググッといて
2021/07/30(金) 21:11:34.63ID:qdQMd8Fb0
オフィススプリクト?だかに移行したいが
VBユーザーがどうにもならんのよ
2021/07/30(金) 21:13:59.49ID:4AGntX9d0
いや両方載せればいいだけじゃん
2021/07/30(金) 21:25:29.88ID:CiBkTLYM0
>>341
もし会社とかでこんなこと訊かれたら頭抱えるわ…
2021/07/30(金) 21:42:30.69ID:zYpnMfjf0
>>341
雑に説明するとね
Rangeは箱で入力されているデータは箱の中身なんだ
だからRange(B1:C1)=Range(B2:C2)みたいにA2:B2って箱をA1:B1に複製する事は出来る
でもあくまで箱そのものを操作するだけだから箱の中身をいじる事はできない
ならどうするかっていうと箱の中身を箱から出してやる必要がある
その為には値を1つ1つ指定してそれぞれで計算してあげなきゃいけないんだ
だからRange(″A1″).Value=Rang(″B1″).Value+Range(″C1″).Value
Range(″A2″).Value=Rang(″B2″).Value+Range(″C2″).Value
ってやるのが正しい
2021/07/30(金) 21:42:52.63ID:91KFOglq0
なんで頭抱える必要があるんだよ
「できない」の一言で会話打ち切りゃ良いだけじゃん
2021/07/30(金) 22:24:06.27ID:lExP/Tyw0
>>333
CがMS言語って・・・
K&RがCを開発したのが1972年、マイクロソフト創業が1975年だぞ
2021/07/30(金) 22:24:33.76ID:4AGntX9d0
スピルでやれって感じ
2021/07/30(金) 22:40:24.48ID:6IY+PAJYM
>>341は別にそんなにおかしな発想ではないと思うけどな
Rangeに対する別のRangeが値のコピーになるのはRangeに対する代入操作が特別にそのように定義されているから(デフォルトプロパティ)で、>>346の言うような「箱」じゃ説明がつかない
=が特別扱いされるなら同様にRange同士の演算が定義されていたって何ら不自然なことはなくて、たまたまそういう仕様になっていないだけだ
2021/07/30(金) 22:53:33.06ID:GVWaTyU8a
SumなりUnionなりあるじゃん
それも「できます」ってのもできてないし
2021/07/30(金) 23:00:06.71ID:xRZDPXU/M
もっともらしい説明をするとしたら、
Rangeはあくまでシート上の特定の範囲を指すものであって、必ずその値はシート上に実際に存在していなければならない。
z = x + y は x + y を先に演算してその結果を z に代入するわけだが、Range同士の加算を行った時点では結果の代入先がまだ決まっていない。
従って、必ずシート上に値が存在しなければならないというRangeの定義に矛盾する。
でも実際これは詭弁で、Range同士の加算がRangeではない行列みたいな値を表すオブジェクトを返し、それをRangeのデフォルトプロパティが受け容れればいい話なんだよね
2021/07/31(土) 00:35:02.17ID:/OoU0klK0
Rangeが箱みたいなものってのはまあ良いんだが
VBAではRangeのようなオブジェクトに対する演算とかはできなくて、その場合は箱の中身(デフォルトプロパティ)を演算する

Range("C1:C2") = Range("A1:A2") + Range("B1:B2")がエラーなのは、 Range("A1:A2")の中身が足し算できないものだから
結果の代入先が決まってないとかじゃなくて、結果を出せないからエラーなんだよ
354デフォルトの名無しさん (アウアウクー MMc5-qtbA)
垢版 |
2021/07/31(土) 00:42:26.77ID:mCBqZyxbM
>>341
少し違うけど似た事は毎回思う
表計算ならc列=a列×b列〜z列みたいな処理が普通だしそういった列ごとの記述はないの?
355デフォルトの名無しさん (ワッチョイ cd8e-Z1qT)
垢版 |
2021/07/31(土) 00:46:23.19ID:mBcGx4p70
>>341
馬鹿は足し算しかしないの?
2021/07/31(土) 01:07:37.07ID:z2VXpram0
配列大好きなphpにも無いし諦めて
2021/07/31(土) 02:01:59.82ID:zyTpcIefM
numpyじゃねーし
358デフォルトの名無しさん (ワッチョイ 4ea4-qtbA)
垢版 |
2021/07/31(土) 02:12:54.61ID:VZqzqhPL0
ありがとうございます
出来ないんですね
私の書き方が悪くてエラーになっているのかと思っていました

演算張り付けやスピルみたいなイメージで
似たようなことが出来るのかなあと考えていました

>>356.353.352.350.347.346
359デフォルトの名無しさん (ワッチョイ cd8e-Z1qT)
垢版 |
2021/07/31(土) 03:57:57.92ID:mBcGx4p70
>>358
単にお前が馬鹿なだけ
行列計算とか言ってたのならわからんでもないけど
2021/07/31(土) 07:18:03.75ID:m7lSxL/B0
>>341
Valueの概念とか謎の箱理論とかは無視していいw
>>350の言うように言語仕様としてできないだけ
RANGEじゃないけどFORTRANみたいに配列同士の演算ができる言語もある
2021/07/31(土) 07:34:59.93ID:gz49wtMt0
rangeは範囲だから2セルの範囲に4セル分は入らない
2021/07/31(土) 09:51:11.76ID:BQeiJ/1Ba
念のため言っとくがイキって煽り散らしたいだけのハゲは無視しとけな
2021/07/31(土) 13:09:56.95ID:54/p9ERo0
バカバカバカバカ言わないでよ
もっと平和的にやりとりできないの?
こんなに優れた無料の質問スレなんだから品位を保つべき
2021/07/31(土) 13:15:16.77ID:TRd8RGa80
ならまずは>>363がドレスコードを守ってくれ
2021/07/31(土) 13:26:23.66ID:r3PlISUvH
当スレは頭の寂しい方はお断りしておりますので
2021/07/31(土) 13:26:59.26ID:z2VXpram0
>>363
なにか勘違いしているようだ
平和とか無料とか、どこかでコストがかかっている。それは誰かが負担している
「日本の平和」はアメリカの核の傘による米軍基地がコスト
掲示板の「無料」は広告。広告が実質ない5chなら、罵倒やマウンティング好きなアホが紛れる事がコストなんだ

君は
・「重火器が飛び交う戦場で無償で敵味方にその場で教えてもらう」
って事をしているんだ
もし平和的に回答がほしいなら、先に「おもしろ画像貼りますんでなんとか解決お願いします!」
みたいにすれば色々と有線して解決してもらえるんじゃないかな
2021/07/31(土) 15:03:38.39ID:yzAefFWlp
>>363
マウントじじいが貢ぎもの差し出せって。
でもこんな頭のおかしい連中ばかりじゃないから気にしなくていいよ。
2021/07/31(土) 15:37:59.04ID:Opw93OJSd
power queryがなかなか覚えられない
みなさんLETは使ってる?
2021/08/01(日) 00:37:47.31ID:ayuPdfaZ0
スレ間違ってないか?
2021/08/01(日) 16:26:51.08ID:12Gisk1n0
バカって言うヤツがバカなんだよ!
2021/08/01(日) 18:09:12.14ID:xwQRbrXaM
と、バカが申しております。
2021/08/01(日) 19:13:18.52ID:hqZEeiIx0
馬鹿ばっかりだな
2021/08/01(日) 19:46:33.48ID:RrQoAxKz0
むしろ寂しがり屋なのでは
374デフォルトの名無しさん (ブーイモ MMbe-j+NH)
垢版 |
2021/08/01(日) 20:59:52.11ID:SyCmN3PQM
ハゲばっかりやな
2021/08/01(日) 21:21:35.58ID:12Gisk1n0
毛の話しろよ
2021/08/01(日) 22:28:03.58ID:PkMCEWYW0
不毛だな
377デフォルトの名無しさん (ブーイモ MMbe-j+NH)
垢版 |
2021/08/02(月) 01:09:21.06ID:H8/w6NZQM
そんなつもりは毛頭ないのですが
2021/08/02(月) 13:19:27.48ID:UEok/DKqd
お前は頭髪がない
2021/08/02(月) 13:22:42.78ID:T+xK0N6pd
俺の芋頭がこんなに頭髪ないわけがない
2021/08/02(月) 18:21:53.57ID:R1Xzu7pP0
でもおまいらは禿げてるんでしょ?
2021/08/02(月) 23:15:41.33ID:x232xQhs0
>>358
クッソ亀だけどこれでいけない?
Range("C1:C2") = [A1:A2 + B1:B2]
2021/08/04(水) 00:57:35.42ID:0L18Nxkj0
>>370
バカって言うヤツがバカって言うヤツがバカなんだよ!
2021/08/04(水) 14:28:57.13ID:lGrUtpF/0
うるせーバカ!
2021/08/04(水) 15:03:01.69ID:09lFZjv40
相手を見下すというのはそれ相応の教育しかない方が行う所作であります故
2021/08/04(水) 15:54:39.96ID:jCZ4Eczla
アホだ
386デフォルトの名無しさん (ワッチョイ 8eba-By/s)
垢版 |
2021/08/04(水) 16:41:44.16ID:IdaynBO00
マウスで選択した範囲のハイパーリンクを自動で開きたいんですがどこを変更すればいいでしょうか?
Aにハイパーリンク A2からA4をマウスで選択 
A1 B1 C1
A2 B2 C2
A3
A4

A99 B99 C99

Sub Macro1()
' Keyboard Shortcut: Ctrl+Shift+P
Dim SelectionArea As Range
Set SelectionArea = Selection
Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
End Sub
A5
2021/08/04(水) 17:04:08.48ID:IZchSkQ4a
>>386
SelectionのRangeをFor Eachで回してひとつひとつ開いていく
のがVBAの一般的な回答になるかと
2021/08/04(水) 17:16:32.22ID:5a+p99Z60
変数に入れてる意味なくて草
2021/08/04(水) 17:19:31.98ID:09lFZjv40
>>388
変数に入れるかどうかは「わかりやすさ」が関係してくるよ
個人開発が大きいVBAでその度合いを嘲笑するのは良くないと思う

ただ、386は俺も何やってるかよくわからん
2021/08/04(水) 18:15:11.64ID:Ww92yPFZa
テーブルで、フィルタしたあとの行削除をマクロの記録でやりたいけどうまくいかない。
フィルタして出たのが1行だとうまくいくけど、複数だとエラー。

テーブルがある。ある一つの列の、特定の文字をフィルタする。(その文字がないときはマクロ押さないつもり)
その列の上の下矢印で全選択、可視セルのみ選択。タブの行削除。フィルタ解除。
この流れってマクロの記録じゃムリ?
1行
で1004エラー?
2021/08/04(水) 18:44:53.04ID:bSPJ2kBBM
マクロで処理するならフィルター要らないかな
記録だけでコード書くのは無理がある処理かな
2021/08/04(水) 18:51:01.89ID:7NmqzzLqM
ムリ
2021/08/04(水) 20:15:52.27ID:14yWBG2X0
マクロの記録だけで業務改善する職場って未来あるよな
2021/08/04(水) 20:43:15.85ID:b6iWr/iv0
未来は僕等の手の中
2021/08/05(木) 14:48:49.27ID:+e5nazzCa
390ですがインストラクターのネタ帳ってとこの改造してみたらできるようになりました(毎回エラーでるけど成功してるので気にせず😌)。

p.s.
印刷時の見た目だけがいい、セル結合された表テンプレで作業を求められる同士が救済されますように…。。
2021/08/06(金) 16:13:36.56ID:T/jNWxQK0
ドの付く初心者です、というよりこういうのを作るのも初めてです

Findで任意の文字列が入ったセルを取得して、A1からそのセルまでを削除するマクロを作りたいのですが
Findの返り値がRangeなので削除するときの範囲指定がうまくいきません
たぶん基礎的なところを理解してないのでダメなんだとは思うんですが、とっかかりが欲しいです
お力をお貸しください

Dim rng As Range
Set rng = ThisWorkbook.Worksheets(1).Range("A1:A10000") _
.Find(What:="SUGOI", LookAt:=xlWhole, SearchOrder:=xlByRows)
これでrngに任意の文字列の座標を取得

この後ろでRange().Delete使って消したいです
2021/08/06(金) 17:02:36.53ID:Oz5kLkmeM
.range(.cells(1,1),.range(適当な範囲)).delete
2021/08/06(金) 20:18:49.98ID:8V+dHMZB0
削除して無くなったセルを詰めるのだろうか
2021/08/06(金) 20:58:11.36ID:3pn6mo5YM
マクロの記録で、、、
2021/08/06(金) 20:58:32.58ID:ZjxmW7bq0
どういう範囲指定か分からんけど返り値のRange.Rowで行数も取れるよ
FindはExcel上のCtrl+Fにも影響するからForEachで検索するようになったな
2021/08/07(土) 13:00:42.96ID:slTH9qD1d
>>397-400
皆様アドバイスありがとうございます

この土日はPCに触れられないため、助言をすぐ実践!とはいきませんが
いただいた助言、ありがたく試させていただきます
2021/08/07(土) 16:23:06.08ID:IR0XtVNG0
Range("A1",rng).clear
Deleteじゃなくてクリアしたいならこれ
2021/08/08(日) 08:21:09.95ID:ebb310K00
クラスでメインコードがすっきりとしていると機能追加も楽だね
2021/08/08(日) 10:53:34.69ID:Yzbpuv/w0
コード書いてる時ってどんな気分ですか?
■ このスレッドは過去ログ倉庫に格納されています