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/08/20(火) 20:40:08.64ID:rBqV29v90
>>714
そいつただの荒らしだから相手しなくていい
2019/08/21(水) 14:26:40.58ID:3vArKtvAM
VBAとVB.netの違いって何?
2019/08/21(水) 14:30:54.32ID:4OnBvdVtM
なんだろうね
ググってみるとわかるかもしれない
2019/08/21(水) 15:08:20.30ID:3vArKtvAM
やかましい
719デフォルトの名無しさん (ワッチョイ 298e-2nrJ)
垢版 |
2019/08/21(水) 16:13:42.94ID:DR/m4EzU0
ID:3vArKtvAM

ゆとりの馬鹿は早く死ね
2019/08/21(水) 16:17:07.75ID:fu57+dJz0
>>716
「.net」ドットネットというのは便利な関数がめちゃくちゃたくさん入ってる箱
マイクロソフトががんばって作った

それがVBから一発で呼び出せるように準備されてるのがVB.net
別にVBAからでも使おうと思えば使えるけど調べるのが大変
2019/08/21(水) 17:27:53.89ID:gVbfBf0Fd
>>720
その説明は...
ちょっとマズいんじゃね?
2019/08/21(水) 20:02:36.72ID:G939Yiu90
>>716
VB.netをOffice特化にしたのがVBA
2019/08/21(水) 20:07:15.59ID:gVbfBf0Fd
>>722
オイオイw
2019/08/21(水) 20:16:48.70ID:UWHhP4Rfa
それでいいよ
VB.NETの方が早く消滅しそうだし
2019/08/21(水) 20:27:43.70ID:u1HjpT+T0
VBAはPython以上に難しい。
2019/08/21(水) 20:51:45.74ID:lLmU49+5M
いやいや、VB6そのものだし
2019/08/21(水) 21:27:40.88ID:UWHhP4Rfa
歴史的経緯を知らないと理解できない変な制限や仕様が多い
そういう意味ではかなり難しい
2019/08/21(水) 21:36:56.28ID:yHZlY2VU0
というか単純に古すぎる
2019/08/21(水) 22:58:52.93ID:6FMyMBWp0
Python vs Excel 五番勝負 - 仕事で使えるのはどちら? 2019/08/21 14:37 クジラ飛行机
https://news.mynavi.jp/article/zeropython-53/

第一回戦 - どちらが気軽に使えるか?【判定】気軽に使えるのは、Excel。ただし、
Excelは有償。また双方ともWebブラウザからも使えるなど利便性は互角。
第二回戦 - CSVファイルが見やすいのは?【判定】美しく表示されるのは、Python。
ただし、Excelは汎用用途に特化しているのに対して、PythonライブラリがCSVファイルの
読み込みに特化していることが理由。
第三回戦 - グラフが作りやすいのは?【判定】引き分け。マウス操作で直感的に操作
できるのはExcelだが、Pandasやmatplotlibのライブラリに習熟していれば、Pythonでも
簡単に描画できる。
第四回戦 - 複雑なグラフが作りやすいのは?【判定】引き分け。
第五回戦 - 集計してみよう【判定】処理が複雑になればなるほどPythonが優勢。
2019/08/21(水) 23:06:25.04ID:t1IwCgGE0
>>727
> 歴史的経緯を知らないと理解できない変な制限や仕様が多い
32KB縛りとかあるけど、言うほど制限多いか?
具体的に数件挙げてみてくれる?
731デフォルトの名無しさん (ワッチョイ 517c-yBk9)
垢版 |
2019/08/21(水) 23:17:16.37ID:ou2s2vhN0
事務職がPythonやり始めたら自分でシステム作って回せるからシステム屋なんていらないよね
2019/08/21(水) 23:49:02.48ID:yHZlY2VU0
>>731
と思うだろ
ネットワークにセキュリティにハード等次々と恐ろしい壁が立ちはだかる
極めつけは社内のお局さま
「いままでこうやってきたから」
2019/08/22(木) 01:27:44.72ID:Oq4Y6cV40
セキュリティはプロに委託しないとまずいだろ
あれ対人戦だから
2019/08/22(木) 07:51:00.42ID:UEI1uExP0
>>732
それ
最後の1行
それで全てが終わるんだわ
2019/08/22(木) 12:34:15.51ID:MtNZNIvl0
そういう問題じゃないな
インフラこそ企業による差異もなく誰がやっても同じで雑事として他人任せでいいもの
経験値がないとスパゲッティ化して要件変更に対応できなくなったり、直せなくなったり
あるいは処理速度、使いやすさ(業者にも上手い下手あるが)
そもそも業務要件自体がSEが入らないと整理できなかったり、入って初めて抜けが発覚したり

「作れるか否か」と「言語仕様」に相関があると思ってるのが素人
もし「作れる」なら、他の言語でも作れたはず
736デフォルトの名無しさん (ワッチョイ 417c-rPVV)
垢版 |
2019/08/22(木) 12:59:21.66ID:+daqT/kh0
5Gになるとハードとかネットワークとかクラウドで利用出来るようになるから、個々でハードを所有する必要がなくなってくるんでしょ
簡単なシステムはコーディング不要でドラッグするだけで出来る物になるらしいじゃん
2019/08/22(木) 13:52:14.29ID:NYoYWugdM
アホなの?
738デフォルトの名無しさん (ワッチョイ cd32-CeWy)
垢版 |
2019/08/22(木) 16:49:43.11ID:e9q5rHyL0
VBAでは函数は呼び出すところより後に置く必要があるの?
C言語では呼び出すところより前に置く必要があるのに。
2019/08/22(木) 17:01:00.58ID:zDN55lmE0
グローバル変数を先頭に書くルールはあるけど関数位置のルールはないよ
2019/08/22(木) 17:24:07.32ID:dzgR3llR0
>>739
そうですかあ。助言してくださってありがとうございました。
2019/08/22(木) 19:47:58.63ID:/1dDo18xM
>>738
> C言語では呼び出すところより前に置く必要があるのに。
前で定義すればプロトタイプ宣言がいらないって言うだけのこと
プロトタイプ宣言書いとけば前後関係はどちらでもいい
742デフォルトの名無しさん (ワッチョイ 417c-rPVV)
垢版 |
2019/08/22(木) 20:53:37.47ID:+daqT/kh0
個人でPCを所有する時代も終わるし、全部クラウドで出来るから、AI作れるくらいじゃないと稼げなくなるよ

VBAなんか動けばなんでもいいんだよ。自分のルールでやればいい。
勉強しても事務職が自動化されてExcelももうすぐ終わるし無意味。
743デフォルトの名無しさん (ワッチョイ fa42-atfx)
垢版 |
2019/08/22(木) 21:04:36.03ID:/rs88TGh0
いつかはそうなるかもしれないけど今は違うんで
2019/08/22(木) 21:13:59.00ID:RtlLQzNd0
>>742
今から「時代が終わる」日まで飲まず食わずで過ごすの?
2019/08/22(木) 21:18:50.86ID:gvlSFTC4d
全くVBA触ったことない人間です
以下の内容ってVBAで実行可能でしょうか?
できるなら独学で地道にやってみようかなと思っていまして…

■現状
サイトから売上データをDLし、指定のシートにコピペ×10サイトほど

■やりたいこと概要
データDLだけでも自動化したい

■やりたいこと詳細
1.サイトにログインする(ID・パスを入力)
2.必要項目をプルダウンやチェックボックスから選び、CSVダウンロードボタンを押してデータをフォルダに格納する(あるいはVBAとおなじエクセル内にシート別でコピペ)

できるかできないかだけでも教えていただけませんか…?
2019/08/22(木) 21:21:39.93ID:UEI1uExP0
VBAってメインのシステムを補って、カバーしきれなかった隙間を埋めるものっていう認識があるわ
おれが作ったプログラムで一番重宝されてるのが
メインのシステムを使うに当たってミスした場合、数百の修正を手作業で一時間以上かけて
しなければならなかったものを10分程度で終わらすことができるようにしたものだわ

メインのシステムは本社レベルで作られているものだから俺のいる地方支店ごときが
口出しできるようなものじゃない
でもVBA使えば工夫次第で補正できる
747デフォルトの名無しさん (ワッチョイ 417c-rPVV)
垢版 |
2019/08/22(木) 21:34:47.45ID:+daqT/kh0
>>744
先を見て他の事を学べって事だよ。ずっとこの処理方法なんでとか言ってるアホなお局と同じだぞ。
748デフォルトの名無しさん (ワッチョイ 417c-rPVV)
垢版 |
2019/08/22(木) 21:38:29.30ID:+daqT/kh0
>>745
出来るよ。PythonとかJavaScriptでも出来るし、RPAならもっと簡単に出来る。VBAでマクロ作るのに2時間かかるとしたら、RPAならそのマクロなら10分で組める。
2019/08/22(木) 21:59:47.62ID:gvlSFTC4d
>>748
10分!?プログラミングできる人って本当にすごい…
RPAちょっとググってみる
ありがとう!
750デフォルトの名無しさん (ワッチョイ ce8c-F52R)
垢版 |
2019/08/22(木) 22:04:42.34ID:7qmldPJo0
RPAっておいくらのRPAの話なのかな
2019/08/22(木) 22:52:02.20ID:f0ZUKfAs0
>>745
出来るけど、出来ると思ってるのが凄い。
VBA触ったことない人は、そもそもエクセルでエクセル以外のものを動かせるとは思わない。
752デフォルトの名無しさん (ワッチョイ cd8e-2c6d)
垢版 |
2019/08/22(木) 23:05:11.29ID:8fzFyZRc0
>>751
馬鹿に言っても無駄
2019/08/22(木) 23:40:59.76ID:bojKrn/j0
Ruby, Selenium WebDriver で、Chrome などのブラウザを自動操作すれば?
漏れは、下のように、yahoo とか、あちこちにログインしてる

driver.navigate.to "https://login.yahoo.co.jp/config/login_verify2?.src=ym";

driver.manage.window.maximize # 画面最大

element = driver.find_element(:id => "username")
element.send_key "ここに、ユーザー名"

driver.find_element(:id => "btnNext").click # ボタンを押す

element = driver.find_element(:id => "passwd")
element.send_key "ここに、パスワード"

driver.find_element(:id => "btnSubmit").click # ボタンを押す
2019/08/23(金) 00:38:10.95ID:Mge9VVN2d
>>742
20年前に同じことを聞いたw
2019/08/23(金) 00:40:39.32ID:Mge9VVN2d
>>748
VBAでも10分位で出来るけどな。
まあ、オブジェクトまでのツリーを取得する自作ツールが有るからなんだが。
2019/08/23(金) 00:42:06.51ID:Mge9VVN2d
>>753
何で余計なもんをインストールする必要のあるもんを勧めるんだよ。
2019/08/23(金) 00:51:38.55ID:FLxS3jQ80
Excel, VBScript, PowerShell などで、IE を自動操作できたっけ?

そもそも漏れは、有料のExcel を持ってないからw
2019/08/23(金) 00:55:38.21ID:EpwxKHRY0
何でこのスレに居るの?
そしてIEの操作にExcelは関係無いよ?
2019/08/23(金) 00:57:13.74ID:hZ3rvHOB0
>>757
「IE を自動操作」で今すぐ検索!!
2019/08/23(金) 10:14:25.17ID:li1Mh2OPM
>>757
いつの時代から来たんだ?
まあ、常に初心者はいるんだが、初心者がだっけとは言わないだろうw
2019/08/23(金) 13:19:10.67ID:Mge9VVN2d
>>757
Excelだけで出来る。
2019/08/23(金) 22:34:11.94ID:VDLlcRP00
仮に専用の関数が無かったとしても、
最悪、SendKeysでどうにかなりそうだが。
2019/08/24(土) 14:52:42.02ID:PMKXSgkW0
VBSだけでInternetExplorer.Applicationからかなりの事ができる
ただしIEに対応してないサイトでは使えないので今からやるならpythonとか使った方が良い
それとExcelとは何の関係もない
2019/08/24(土) 17:07:42.16ID:YNEEa1VEM
1と2行目の間に新たに行を挿入し、
そこに別のセルからデータを貼り付ける。
という作業を行いたいです。

相対的に記録することによって、
作業したい行の1列目のセルを選択した状態でマクロを実行すると望む動作ができるマクロを作れました。

これを1から2000行目くらいまで繰り返したいです。

現状は、
1行目を選択してマクロ実行、
3行目(間に行を入れたので、元2行目です)を選択してマクロ実行、
と手動でやるしかない状態です
よろしくお願いします
2019/08/24(土) 19:19:46.76ID:pPYobWUl0
2000行あって、その全ての行間に1行ずつ挿入(データ貼り付け)?
上からじゃなくて下からやっていけば行番号ずれない

具体的には・・・・↓
766デフォルトの名無しさん (ワッチョイ cd8e-2c6d)
垢版 |
2019/08/24(土) 19:46:04.47ID:tfdPm5hj0
「1から2000行目くらいまで」
こういう書き方しかできない頭の出来を治せばできるよ
2019/08/24(土) 20:18:08.93ID:iSxknok+0
カーソル下に二つ動かすとこまでマクロ記録すればいい
2019/08/24(土) 20:56:51.54ID:uDF3Dyif0
PDFから文字を抽出する時、
PDTextSelect.GetTextだと文字化けすることがあるんだけど、
文字化けしない方法ない?

素直にWordかExcelに変換しろよって思うだろうけど、
レイアウトがアホたみいなPDFなので、
AcroExCh.HiliteListで座標を調べながら抽出したい。
769デフォルトの名無しさん (ワッチョイ 417c-rPVV)
垢版 |
2019/08/25(日) 00:24:58.63ID:0CQCtKXC0
>>768
エンコーディングに問題があるために正常に文字列として抽出できない状態です。
PDF変換をOS XのQuartz経由で行っているのが原因でしょう。
画像に変換してからテキスト抽出するのがいいでしょう。
770デフォルトの名無しさん (スププ Sd9a-MGS/)
垢版 |
2019/08/25(日) 08:41:11.09ID:OUvv1Qufd
そんな事をVBAでする必要ある?
お前らが良く言う適材適所はどうなった?
2019/08/25(日) 09:59:52.06ID:vWh3PKjN0
>>769
いや、書式ごとコピーすれば文字化けしないから、
取り出し方の問題だと思ってる。

>>770
何ならいいの?
会社のだから、好き勝手インストールできないので、
VBA、VBS、JSくらいしか選択肢無いんだけど。
2019/08/25(日) 11:12:17.03ID:lhXU2LAa0
Acrobat入れて貰えるならもうちょっと頑張ろうぜ
2019/08/25(日) 11:15:37.82ID:wuTzbvLf0
Acrobatってphotoshopみたいにjs使えなかったっけ
VBAでPDFはしんどいだろう
774デフォルトの名無しさん (ワッチョイ 417c-rPVV)
垢版 |
2019/08/25(日) 12:11:56.92ID:0CQCtKXC0
Excelに落とし込むならVBA。事務の現場ではでjsをメンテできる人は少ないから会社では使えない。
VBAでやる必要があるかというよりも、システムに頼むと金も時間もかかるし、環境的にExcelしか使う方法がないという感じだよ。
2019/08/25(日) 12:25:55.53ID:BUsnCBPl0
>>764
その望む動作をするマクロをforで指定行まで2行ごとに繰り返す
2019/08/25(日) 18:55:03.24ID:vWh3PKjN0
>>773
使える。
というか、実際VBAだけじゃきついので、VBAの中で使ってるわ。
tmp = "var tmp = ○○○"みたいな、変な書き方になるけど。
2019/08/25(日) 19:15:04.48ID:wuTzbvLf0
>>776
evalみたいに使っているのね
それが正解だと思う
778デフォルトの名無しさん (ワッチョイ 417c-KNIi)
垢版 |
2019/08/27(火) 21:43:59.58ID:12PwAtNh0
Excel VBAだけでDBの構築って出来ますか?出来るとしたらどんな方法がありますか?
2019/08/27(火) 21:54:06.25ID:WoMQ7lMm0
ないよ
たった行列が10億だか100億程度で上限があるから
2019/08/27(火) 21:55:12.05ID:l/owAi2u0
シートにテーブル作ればいいだけじゃないかな
2019/08/27(火) 22:09:51.27ID:sJEUu/BYa
あ、そういう質問なの?
てっきりOracleとかMySQLのインストールやセットアップ、テーブルセッティングをキーストロークとかで自動化したいって話だと思った
2019/08/27(火) 22:10:09.55ID:oi7M6oV+0
>>779
まるでDBサーバには制限がないみたいな物言いだな
783デフォルトの名無しさん (ワッチョイ cd8e-2c6d)
垢版 |
2019/08/27(火) 22:19:55.46ID:OQSCjaIT0
馬鹿にマジレスか
784デフォルトの名無しさん (ワッチョイ 21cf-Q35w)
垢版 |
2019/08/27(火) 22:55:47.76ID:6Z6gO9EQ0
Excel 2007/2010で不思議な現象に出くわしています

以下のコードを標準モジュールに書きます

Sub main()
  Cells(1, 1).Interior.Color = vbRed
End Sub

Alt + F8で「main」マクロを実行すると「A1セル」が赤色に塗られます

ところが

function main()
  Cells(1, 1).Interior.Color = vbRed
  main = ""
End function

このような関数を作り、ワークシート内で使用すると
「#VALUE!」が戻ってきてA1セルも赤色に塗られません。

「Cells(1, 1).Interior.Color = vbRed」の箇所をコメントアウトすると関数は正常に動作します
Functionプロシージャ内部ではセルの背景色を変えるなどの処理は出来ないのでしょうか?
785デフォルトの名無しさん (ワッチョイ 417c-KNIi)
垢版 |
2019/08/27(火) 23:05:57.02ID:12PwAtNh0
初心者で申し訳ないんですけど、Excelだけだとシートにテーブルを作って、VBA でデータ入力したり、更新したりするってことなのかな
DBっていうとAccessとか使うしかないってこと?
2019/08/27(火) 23:09:31.93ID:sJEUu/BYa
DBってなんの話ししてるかまじでわからん
エクセルをデータベースのように使いたいって話し?
2019/08/27(火) 23:18:51.14ID:l/owAi2u0
>>785
入力とかシート上でできることはわざわざVBAでしなくてもいいんじゃないの、入力フォームが欲しいとか言うんでなければ
2019/08/27(火) 23:21:53.49ID:l/owAi2u0
複雑なデータ抽出とか更新処理はVBAでやらないと大変なんじゃないかね
2019/08/27(火) 23:25:26.42ID:8LX/iGEV0
DBを構築して何をやりたいのか
2019/08/27(火) 23:44:42.74ID:Jze2yq7b0
adodbやadox使えばaccess買わなくてもmdb使えるし
MS-SQLExpressなんかもタダで使える
791デフォルトの名無しさん (ワッチョイ 417c-KNIi)
垢版 |
2019/08/28(水) 00:58:46.20ID:5ekiJuZi0
>>790
ありがとうございます!これのことだと思います。調べてみます
2019/08/28(水) 00:59:49.87ID:v0kWonca0
>>784
その通り、ワークシートから呼び出された関数からは別のセルは加工できない仕様になってる
2019/08/28(水) 03:05:45.46ID:Ttu8EBlV0
>>784
状態変える処理やるとそこで強制終了するね
エラーでキャッチもできないし
794デフォルトの名無しさん (スプッッ Sd9a-MGS/)
垢版 |
2019/08/28(水) 10:32:02.44ID:i0zGkAfmd
Excel以外は会社の縛りで入れちゃダメって設定だったろ?
2019/08/28(水) 11:04:52.35ID:xlt6w80MM
>>794
( ゚д゚)ポカーン
796デフォルトの名無しさん (ワッチョイ cd9b-iCeB)
垢版 |
2019/08/28(水) 12:15:47.11ID:2Ou8kvzb0
>>792-793

Cells(1, 1).Interior.Color = vbRed を

Cells(1, 1).Font.Color = vbRed

にすればちゃんと動くんだがなあ

残念
2019/08/28(水) 13:03:44.86ID:lngkMUR1d
>>794
普通はAccessも入ってるもんだが。
2019/08/28(水) 13:06:36.95ID:lngkMUR1d
>>796
実施後にセルの色を変える処理を呼び出せば少し高度だけど可能。
SetTimerを使う。
2019/08/28(水) 18:08:37.69ID:5E+IOBSnM
>>797
Access外す所多いよ
800デフォルトの名無しさん (ワッチョイ fa94-MGS/)
垢版 |
2019/08/28(水) 20:25:09.97ID:ljeEb3Lh0
DBと言われてaccessだと思う人って少ないよね
2019/08/28(水) 21:11:17.18ID:CSbIlVLR0
>>800
でしょうね
でも、DBのフロントエンドなら私としては断然ACCESS

office365に移行した会社増えてるみたいだから、実は使えるようになってますって人もいるんじゃないかな
2019/08/28(水) 21:14:21.69ID:V6K8kQhZM
DBと言えばaccessと思う人って多いよね
2019/08/28(水) 21:17:52.13ID:KZSjYbkvM
そしてデフォルトで使ってうっかり誤操作してデータ壊すまでが洗礼
トランザクションとは
2019/08/28(水) 22:59:00.75ID:AiVdwxrR0
DBZ
2019/08/28(水) 23:22:20.08ID:QYwDb2se0
>>802
エンジンはWindowsに標準で入っているから
メモ帳があれば使えるDBだし
2019/08/28(水) 23:31:35.60ID:tqyYzyWN0
DBがOS標準で入ってるのは知ってるんだけど
じゃあaccessって何のために存在しているの
2019/08/28(水) 23:37:37.32ID:QYwDb2se0
フォーム、レポート、クエリーエディタ
データシートビューでも連結テーブル表示できるし
Excelと違って型チェックする必要ないから楽だぞ
2019/08/28(水) 23:42:20.06ID:CSbIlVLR0
>>806
DBだけじゃないから
2019/08/29(木) 02:07:43.21ID:HAQEZgo2x
PowerQuery使えばいいのに
810796 (ワッチョイ 619b-4hip)
垢版 |
2019/08/29(木) 09:59:11.11ID:VCulxt3G0
> Cells(1, 1).Interior.Color = vbRed を
>
> Cells(1, 1).Font.Color = vbRed
>
> にすればちゃんと動くんだがなあ

と書いたが、Excel2007だとダメだな
やっぱFunctionプロシージャ内でセルの状態を変化させるのはご法度ということか

>>798
SetTimer調べてみたけど想像も付かん
良ければ教えて下さい
811デフォルトの名無しさん (ワッチョイ 1b8c-OHvC)
垢版 |
2019/08/29(木) 11:59:18.65ID:5gorWdce0
>>796
>>798
どういうこと?
具体的な例をにfunctionから貼ってくれ
2019/08/29(木) 14:14:31.26ID:unFZw31s0
>>784 >>810
Excel のユーザー定義関数の制限について
http://support.microsoft.com/kb/170787/ja
2019/08/30(金) 09:41:25.60ID:Jl3VomiYM
相互参照をアクティブにする方法はどうしますか?

book1でbook2のとあるセルの値を取得、
book1でその値を元に計算した結果のセルをbook2で参照して取得したいです。
両方のブックを開いてるとリアルタイムで連動しますがbook1を閉じるとbook2が連動しなくなってしまいます。

何とかしてbook2だけ開いてても動くにはどうすればよいですか。
2019/08/30(金) 09:56:38.22ID:GG5C7GdFr
csvから特定のカラムを取得してレポート用資料作成をしたいです
それぞれ値を取る際にFormatしたり、キーを取って別シートを参照して値取ったりしてますここらへんをfunctionで纏めて呼び出し元に返したいのですが、複数の意味ある値を返す際どういった形式にするのが良いのでしょうか
リストだと煩雑すぎますし利用する際に中のデータ構造を正しく理解する必要があるので辛いです
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。