Excel VBA 質問スレ Part63

■ このスレッドは過去ログ倉庫に格納されています
2019/09/16(月) 19:34:59.04ID:emfTAhXr0
!extend:checked:vvvvv:1000:512

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

※前スレ
Excel VBA 質問スレ Part62
https://mevius.5ch.net/test/read.cgi/tech/1561303297/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2019/11/12(火) 04:29:40.38ID:0+gbLwkM0
>>648
先頭のシングルコーテーションは&演算子で結合する

application.run 'フルパス'!プロシージャ名
という形になるようにする
2019/11/12(火) 08:36:17.42ID:l0mUz5CNM
>>649
やってみます!
ありがとうございます。
2019/11/12(火) 08:50:10.74ID:l0mUz5CNM
>>649
シングルクォーテーションにしたら…コメントアウトになりません?
…今気がついたけど…
2019/11/12(火) 08:58:18.88ID:l0mUz5CNM
>>649
すみません、自分の早合点でした。
"'" &でやればシングルクォーテーション使えましたね…
2019/11/12(火) 10:11:19.95ID:n8VUgOjjM
スレチですまん。
俺はVBAをやってるが上司から言われました。(うちの部署、10名のうち、VBAを作れる人は二人だけ、、、)

AIが集計をしてくれるからEXCELは必要ない時代が来るねと言ってた。

反論出来る?
2019/11/12(火) 10:27:44.24ID:9Ebm7+hvM
楽しみですねと答える
2019/11/12(火) 10:28:50.68ID:l0mUz5CNM
まぁAIが台頭してくる頃にはその上司は居ないだろうからスルーでいいんじゃない?

それかそのAIの設定?は誰がやるんだよっ!
そんな事も分からん様なヤツの方が必要なくない?ってw
2019/11/12(火) 11:50:40.50ID:PU6pNSMVF
AI以前に、最近のDXの流れでシステムが合理化されていって、VBAでやってるような無意味な業務自体が消滅するのが先だろうね
2019/11/12(火) 13:09:11.37ID:YXMhvVfEa
AIってまたざっくりしてるなぁ
2019/11/12(火) 13:51:05.18ID:kiUdBOPaM
○データフロー中に存在する、辻褄合わせのためのデータ加工
→業務フローの見直し、システムの改善、ETLツールの導入等により脱VBA
○ルールベースで実施可能な、機械的な意思決定のためのレポート作成
→完全な自動化により脱VBA
○ルールベースでは困難な、人間的判断を必要とする意思決定のためのレポート作成
→BIツール等に置き換えて脱VBA
AIを使うとしたらこの3番目だけど、そこまでいく前にやるべきことはいくらでもある
それをやり尽くしてAIの導入を検討する頃にはVBAなんかとっくに無くなってるはずだから、VBAとAIが直接競合することなんて無いよ
659デフォルトの名無しさん (ワッチョイ 0f8e-8UzB)
垢版 |
2019/11/12(火) 14:15:36.08ID:fOVSc9po0
現在のAIが何をやってるか知らない馬鹿ども
2019/11/12(火) 19:55:22.11ID:CeIzlsxBr
VBAが必要ないじゃなくて、EXCELが必要なくなるだからな
人間が介在する限り、なんらかのUIは必要なわけで、AIとEXCELはまったく競合しないわな
2019/11/12(火) 21:10:30.98ID:6BPOxo4o0
昔のSFみたいに透明なパイプを空飛ぶ車が走ったりロボットが何でもやってくれる世界を想像しているようなもんだろ
残念ながら現実は違ったよな
662デフォルトの名無しさん (ササクッテロレ Sp0f-9pxj)
垢版 |
2019/11/12(火) 23:57:00.45ID:NVQBnRcZp
構文ミスって無限ループが発生した時にエクセルが固まるやつはなんか対策ないんか?
2019/11/13(水) 01:01:43.28ID:1iCOkal60
>>662
Esc連打したり他のウィンドウをアクティブにしたりを繰り返してみる
2019/11/13(水) 08:52:45.90ID:dBffRhEVM
VBAよりPythonを覚えた方がいいなぁ。
2019/11/13(水) 09:27:16.58ID:QPrlUzWZd
>>661
交通事故をなくすには車を隔離してパイプの中を走らせるのが一番
ただしあと300年かかる
2019/11/13(水) 09:50:15.66ID:zYuYteZMM
>>664
低学歴がPythonやっても仕事無いぞ
667デフォルトの名無しさん (ワッチョイ fb7c-t5zK)
垢版 |
2019/11/13(水) 11:30:26.61ID:0dM9Rqjm0
いつかはExcelもPCも必要なくなる時代は来るだろうけど今は必要だからな。データ管理する以上はExcel、Accessは最後まで残りそうだけどな。
将来的に事務職がなくなれば、事務管理してる上司もいらないから、新しい仕事探したほうがいいね
Pythonだけ出来ても仕事ないよ
2019/11/13(水) 12:06:34.79ID:gzl4+/xqM
faxすら無くせないのに
2019/11/13(水) 13:00:27.19ID:cKfGi7tYa
PC無くなるのはまだ随分先だろ
2019/11/13(水) 13:55:43.47ID:aJh4//42d
紙の書類を茶封筒で送る郵便すら生き残ってる
2019/11/13(水) 15:18:04.61ID:WJRWmFcXa
学校で奨励されたためにVBAエキスパートを受験しようと思いましたが、仮にスタンダードまで合格すれば理解度はどの程度にまで到達するのでしょうか?
2019/11/13(水) 15:26:24.21ID:zYuYteZMM
その時点で世の中の自称VBAプロの半数以上よりは上だと思う
世の中のVBA使いのレベルは想像を絶するほど低いから、
少しでも何が役に立つもの作れるようになったら「VBAを使いこなせます」と言っちゃっていいよ
2019/11/13(水) 16:25:53.60ID:WaSRdoWP0
エキスパート持ってるけどやっぱり試験用の知識って感じだよ
つまらん関数の引数とか
PC環境あれば簡単に確認できるものを暗記でやる感じ
2019/11/13(水) 19:26:09.82ID:YFdnwmN50
VBAエキスパートなんかあるのか・・。
VBエキスパートではなく。

トランスフォーマー検定じゃなくて、
トランスフォーマーガム検定みたいな感じか?
違うか。
2019/11/13(水) 19:34:50.53ID:8BkVy1q9F
求められるのはVBAエスパー
2019/11/13(水) 19:58:58.25ID:YIACCBmB0
A列で適当な色でフィルターをかけて、B列の可視セルをC列の値✕D列の値にする場合はどうすれば良いでしょうか。
for each in specialcells(xlCellTypeVisible)
b.value=c.value*d.value
next
にしていますが、データ2000くらいあるとと遅いです。
b.specialcells(xlCellTypeVisible).value=を用いれば早くなりそうですが、よく分かりません。
分かる方いましたら教えて下さい。
2019/11/13(水) 20:10:53.70ID:YFdnwmN50
何だそりゃww
可視セル以外は計算しちゃいけないのか?
計算してもいいなら、全部配列に入れて計算しちゃえば?
2019/11/13(水) 20:15:05.26ID:YIACCBmB0
>>677
早速の返信ありがとうございます。
可視セル以外は変更してはだめなんです。
後だしになるんですが、黒でフィルターしたらC✕D、白ならC-Dと処理が違うためです。
2019/11/13(水) 20:15:12.55ID:6AWs9S2tr
>>676
B列にはじめから計算式入れとけば良いんじゃ
2019/11/13(水) 20:23:26.06ID:1iCOkal60
>>678
フィルタいらなくない?
色で計算変えればいいだけじゃない?
681デフォルトの名無しさん (ササクッテロ Sp0f-jIeE)
垢版 |
2019/11/13(水) 21:12:54.98ID:xS2J4sOcp
質問失礼します。
vbaからc++のdllへ引数を渡してc++で処理し、配列をvba側に返したいです。
引数で渡すものは、配列ではありません。

文字列や数値をvbaで受け取ることは出来るのですが、配列はどのようにc++から受け取れば良いのでしょうか?

お願いします。
2019/11/13(水) 21:45:08.38ID:YIACCBmB0
>>679
>>680
ボタンを押した時だけ変更するようにしたいので、式を入れるのは難しいかと思います。
またまた後だしになるんですが、他にも色々ボタンを配置して、このボタンを押すとB=Cとしたり、こっちのボタンを押すとB=1.1*Dという感じにしています。
2019/11/13(水) 21:50:01.18ID:1iCOkal60
>>682
だからボタン押した時色によって計算変えればいいじゃないかと
2019/11/13(水) 22:20:19.63ID:nTBpuTY40
このスレって北海道のハゲのおっさん来てるの?
2019/11/14(木) 20:59:40.88ID:17R2nmHB0
>>682
色以外にフィルタをかけられる要素は無いの?
あるなら、一旦解除して配列に入れて、該当行だけ計算して、またセルに戻して再度フィルタ。

>>681
普通に受け取れると思うけど。
ByRef的に受け取るの?
2019/11/15(金) 05:48:17.81ID:yBQ3/wSNr
>>676
for eachループを
range(cells(2,2),cells(10000,2).end(xlup)).specialcells(略).formula="=C2*D2"
2019/11/15(金) 06:53:06.51ID:PYCwQdmA0
このスレって北海道のハゲのおっさん来てないの?
2019/11/15(金) 08:30:23.58ID:1eiULMc8H
>>687
こんなとこでハゲ友おっさんずラブっすかw
2019/11/15(金) 09:09:18.54ID:kdsqvzvNd
>>671
昔、某掲示板で質問してた奴が、欲張らずに基礎からやった方が良いと言われてエキスパート持ってるんですけどねと言ってた人がいた。
そんな感じかな。
2019/11/15(金) 09:16:55.98ID:QHXNBkQLM
vbaスタンダードの教材の目次見たけど基礎というか普通に初心者向けという感じがした
逆にこういう内容飛ばしてどうやって使ってるんだろう
2019/11/15(金) 18:37:41.87ID:C4049C6d0
基礎からやるの、良いと思うけどな。
基礎を無視した俺は、ADOもWinAPIもUiAutomationも使えるが、
プロシージャの意味を20年くらい知らなかったぞ。
2019/11/15(金) 18:58:40.00ID:PYCwQdmA0
スーパーつるっぱげ
2019/11/16(土) 13:07:26.06ID:sIw2xRM6a
VBAスレ民はマジで頭弱めだな
694微糖 (ワッチョイ 2eda-zGDE)
垢版 |
2019/11/16(土) 20:01:13.26ID:Owph/MuN0
「置換したい文字列」と「置換文字」を変数として扱って、全体の文字を出力することはできませんか?
Replace関数では、Replace(文字列, 検索文字, 置換文字)とありますが、
文字列の入った変数を第一引数に与えるエラーが出てしまいます。

最終的な目的として、エクセルで定型的なHTMLコードを出力したいのです。
何かよい策がありましたら教えてください。

Sub 企業情報コピーテスト()
Dim i As Long
Dim s1 As String
Dim excelldata1 As String
Dim excelldata2 As String
....
s1 = HtmlSorce.Cells(2, 2).Value
'企業名
excelldata1 = Sheet1.Cells(4, 4).Value
'資本金
excelldata2 = Sheet1.Cells(5, 4).Value
Replace(s1,"tabledata1", excelldata1)

Debug.Print (s1)
End Sub
695微糖 (ワッチョイ 2eda-zGDE)
垢版 |
2019/11/16(土) 20:02:05.70ID:Owph/MuN0
■HtmlSorce.Cells(2, 2)に入っているデータ■
<table width="100%" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>企業名</td>
<td>
tabledata1
</td>
</tr>
<tr>
<td>資本金</td>
<td>
tabledata2
</td>
</tr>
....
</tbody></table>

///////////////////////////////
こんな感じです。どうぞよろしくお願いいたします。
2019/11/16(土) 20:06:56.33ID:sGW0vpYA0
>>694
関数の結果を入れる変数が抜けてる
コートは精査してないけど、とりあえずこれでいいんじゃね?
s1 = Replace(s1, "tabledata1", excelldata1)
2019/11/16(土) 20:08:04.72ID:TSYRRFtw0
>>694
普通はエラー出ない
698微糖 (ワッチョイ 2eda-zGDE)
垢版 |
2019/11/16(土) 20:10:44.84ID:Owph/MuN0
すいません。できた 私はあほでした。
s1 = Replace(s1,"tabledata1", excelldata1)
で出力できました。
699微糖 (ワッチョイ 2eda-zGDE)
垢版 |
2019/11/16(土) 20:11:37.38ID:Owph/MuN0
みんな、早い。。ありがとう。。
2019/11/17(日) 03:29:18.67ID:2cbrHYYdx
レンダリングエンジンとしてExcelを使ってるの?
つらすぎるなそれは
2019/11/17(日) 04:16:20.60ID:ssaK56un0
レンダリングエンジンの意味間違ってるよ
2019/11/17(日) 06:32:04.83ID:xHzCYEPp0
使ってるかどうかは、これだけじゃ判断できない
可能性はあるけど断言はできないから
703微動 (ワッチョイ 2eda-zGDE)
垢版 |
2019/11/17(日) 11:35:29.77ID:7JpkRiZ80
わたくしのことですか??

コーディングは、いつもAtom使って手打ちしてるよ。
ただ、定期的にエクセルで入稿してくる案件があるので、
毎回エクセルからデータを手作業でコピペするのがしんどくて
コピペミスもあるし。
VBAでまるっとタグが出力できればいいなと。

他に良い方法がみあたらないし、これがベストかと。

思ってるとこでし。
2019/11/17(日) 11:38:28.01ID:iKuebie5a
Atomとか久しぶりに聞いたな
VSCodeに完全敗北して利用者がほとんど乗り換えた挙げ句に開発元がMSに買収されて完全に開発も終わった死んだエディタだよ
705微糖 (ワッチョイ 2eda-zGDE)
垢版 |
2019/11/17(日) 11:47:05.51ID:7JpkRiZ80
そんなこといわなくても、、、
web系は、sublimetext か Atom が多いと思う。まれに秀丸さんもいるお。
2019/11/17(日) 11:51:44.83ID:+9SinR1u0
>>705
そいつは触らなくていいやつだよ
707微糖 (ワッチョイ 2eda-zGDE)
垢版 |
2019/11/17(日) 11:52:22.26ID:7JpkRiZ80
ここらへんにいらっしゃるかたは
R列が何番目か直ぐに頭にでてくるのかしらん。

セル選択したら、行列番号がすぐわかる表示設定あるといいですねえ。
2019/11/17(日) 11:52:40.84ID:RwF92niuM
いつの話だよ
Web系のAtomユーザーはほとんどVSCodeに乗り換えたよ
2019/11/17(日) 12:25:47.38ID:sTIVZZab0
>>707
エクセル 列の表示を数字とアルファベットで切り替える
https://www.tipsfound.com/excel/01204
2019/11/17(日) 12:31:12.53ID:Sxy4Nq05x
>>707
言ってることがよくわからんけど↓みたいにVBEでコンソール出力するのは駄目なの?
?Selection.Item(1).Row & ", " & Selection.Item(1).Column
711微糖 (ワッチョイ 2eda-zGDE)
垢版 |
2019/11/17(日) 12:46:43.50ID:7JpkRiZ80
いろいろ提案ありがとうございます。
普通に対応表を手元においときます。
2019/11/17(日) 13:14:49.52ID:+9SinR1u0
>>707
A1とR1C1表示を切り替えられるショートカット作った
713デフォルトの名無しさん (ワッチョイ e9f1-Xz/Q)
垢版 |
2019/11/17(日) 13:37:03.64ID:3mRPp1GD0
まれに禿もいるよ
714デフォルトの名無しさん (ワッチョイ e9d2-gqPR)
垢版 |
2019/11/17(日) 14:08:51.89ID:1WE0juC20
>>707
1行目に連番を振っておく
2019/11/17(日) 15:12:07.26ID:6UewZHZj0
>>707
機能はいらんかな。見たくなったらcolumn()入れてる
2019/11/17(日) 18:02:42.14ID:iBcgGvQr0
北海道のグラサンの禿はここにきてないの?
2019/11/17(日) 19:02:54.92ID:FdUgz5q60
俺も=Column()入れてるわ。
ていうかね、何でどっちか片方だけなんだよ。
A(1)、B(2)とか両方表示するモード付けりゃいいのに。
2019/11/17(日) 19:28:55.74ID:6UewZHZj0
>>717
おーそれいいね
ややこしかったらツールチップみたいに、ポイントした時に出てくるとかでも良い
2019/11/17(日) 19:33:09.97ID:Sxy4Nq05x
現状自作するしかないわな
2019/11/17(日) 19:38:26.25ID:SNu9npot0
むしろ列番号が必要なことって少なくね?
2019/11/17(日) 19:43:53.48ID:6UewZHZj0
indirectやVBAで古いデータを整備する時にたまに必要になる
722デフォルトの名無しさん (JP 0H92-iGNt)
垢版 |
2019/11/17(日) 22:37:01.66ID:8Px/zAQ8H
1行目1列目にランダムに数字が入力されている表において、その数字を上から順番に足して2列目にその合計を表示させるにはどう書けばいいでしょうか?(下みたいな感じで)

1列目 2列目
--------------------
4     4
7     11
8     19
12    31
15    46
2     48
2019/11/17(日) 22:40:14.20ID:ssaK56un0
上から順番に足して2列目にその合計を表示させればいいですよ
2019/11/17(日) 22:55:50.76ID:Sxy4Nq05x
>>722
ワークシート関数じゃ駄目なの?
2019/11/17(日) 23:11:53.16ID:+9SinR1u0
>>722
左のセル+上のセル
2019/11/17(日) 23:14:14.11ID:+9SinR1u0
A2から対象行までを合計
2019/11/18(月) 00:38:18.28ID:NH6dP3qE0
for i = 1to10
v=v+cel(i,1)
cel (i,2)=v
next
みたいな感じ?
2019/11/18(月) 00:45:00.05ID:+I12EpJt0
なんだcelて
ちゃんと書けボケナス
729デフォルトの名無しさん (ワッチョイ 6d8e-2sI3)
垢版 |
2019/11/18(月) 01:27:00.60ID:pxOyK5Ui0
>>722
馬鹿は死ねよ
2019/11/18(月) 04:45:54.36ID:SrAXqM1K0
Ruby で作った

nums = <<"EOT".lines( chomp: true ).map( &:to_i ) # 数字の配列。改行は削除
4
7
8
12
15
2
EOT

totals = nums.each_with_object( [ 0 ] ) {
|num, ary| ary.push( ary.last + num ) }

totals.shift # 先頭要素の0 を削除する
p totals #=> [4, 11, 19, 31, 46, 48]
731デフォルトの名無しさん (ドコグロ MM15-dzja)
垢版 |
2019/11/18(月) 15:14:40.58ID:ScNSEd7IM
>>722
Sub sample1()
Dim i Range
Range("B1") = Range("A1")
For i = 2 To 6
Cells(i, 2) = Cells(i - 1, 2) + Cells(i, 1)
Next i
end sub

A列が不特定多数で出力の速さを求めるのなら

Sub sample2()
Dim i Range,j Range
j = WorksheetFunction.Count(Range("A:A"))
Application.ScreenUpdating = False
Range("B1") = Range("A1")
For i = 2 To j
Cells(i, 2) = Cells(i - 1, 2) + Cells(i, 1)
Next i
Application.ScreenUpdating = True
end sub
732デフォルトの名無しさん (ドコグロ MM15-dzja)
垢版 |
2019/11/18(月) 15:19:20.54ID:ScNSEd7IM
間違えた

Sub sample1()
Dim i As Long
Range("B1") = Range("A1")
For i = 2 To 6
Cells(i, 2) = Cells(i - 1, 2) + Cells(i, 1)
Next i
end sub

A列が不特定多数で出力の速さを求めるのなら

Sub sample2()
Dim i As Long,j As Long
j = WorksheetFunction.Count(Range("A:A"))
Application.ScreenUpdating = False
Range("B1") = Range("A1")
For i = 2 To j
Cells(i, 2) = Cells(i - 1, 2) + Cells(i, 1)
Next i
Application.ScreenUpdating = True
end sub
2019/11/18(月) 15:42:28.46ID:cwF5jgoMd
>>707
VBEのメニュー上にテキストボックス作って数値とアルファベット相互変換する奴作れば。
2019/11/18(月) 15:43:19.48ID:cwF5jgoMd
>>720
寧ろ列番号の方が必要。
2019/11/18(月) 15:53:04.73ID:cwF5jgoMd
>>722
Range("B1:B10").Value="=SUM($A$1:$A1)"
'関数残したくなければ下を追加
Range("B1:B10").Value=Range("B1:B10").Value
2019/11/18(月) 17:07:56.73ID:S9/8fJfLM
>>734
どんなときに必要なの?
2019/11/18(月) 18:10:29.63ID:7QICIGub0
マクロ実行ブックと同じフォルダ内にある"CCT"というブックに
1つのシートがあって、そのシートをマクロ実行ブックの"CCT1"に貼り付けたいのですが
"CCT"内のシート名が毎回変わってしまうので、変わってもコピペができるマクロをおしえてください

Workbooks.Open ThisWorkbook.Path & "\CCT", ReadOnly:=True
Sheets("*").Cells.Copy ThisWorkbook.Sheets("CCT1").[A1]
ActiveWindow.Close savechanges:=False
2019/11/18(月) 18:25:23.23ID:cwF5jgoMd
>>736
普通はCells(i, j)を使うから
2019/11/18(月) 18:33:30.81ID:cwF5jgoMd
>>737
Worksheets(1)じゃ駄目なん?
2019/11/18(月) 19:06:26.91ID:S9/8fJfLM
>>738
まさかと思うけど、F1~X1のセルの処理を
For C = 6 To 24 ' F列からX列
~.Cells(1, C).~
Next
みたいにコーディングしてるの?
741デフォルトの名無しさん (ワッチョイ 0d7c-RQWt)
垢版 |
2019/11/18(月) 19:14:56.88ID:sS2XhUCG0
vbaを勉強してるのですが、specialcellsとusedrangeの違いが分からないのですが、どんな時に使い分けるのですか?
2019/11/18(月) 19:45:04.18ID:TkavPukF0
どっちも普段使わない
2019/11/18(月) 19:45:09.69ID:cwF5jgoMd
>>740
そんなものは内容による。
Range("C1")のような表現よりも数学的、座標的表現であるCellsの方を使うことの方が多いと言ってる。
2019/11/18(月) 19:46:05.14ID:HkQQG0+L0
>>737
シート名かシートの順番を固定しないと無理
2019/11/18(月) 19:49:12.48ID:HkQQG0+L0
>>741
specialcellsは選択範囲から取得される
usedrangeは選択範囲関係なくシート全体から取得される
2019/11/18(月) 19:50:38.34ID:cwF5jgoMd
>>744
シート1つしか無いと思う。
文が曖昧だから必ずそうとは言えないが。
2019/11/18(月) 19:55:46.17ID:S9/8fJfLM
>>743
お前がそうだというだけの話なのね
2019/11/18(月) 19:56:31.57ID:cwF5jgoMd
>>747
そうだよ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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