X



Excel VBA 質問スレ Part59

■ このスレッドは過去ログ倉庫に格納されています
2019/02/09(土) 15:12:30.70ID:3lTArmdf0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part58
https://mevius.5ch.net/test/read.cgi/tech/1542577644/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/02/15(金) 11:56:15.89ID:FxoJIoi60
>>153
今更聞いてる処がどうなの?
こんなのどっちでも簡単なのに、私は書かないけどなポリシーです
2019/02/15(金) 11:59:50.72ID:GIzZTHxJM
>>152
データソースがRangeであるか否かに関わらずs1は As String相当 だろう。
件の関数が何を返すべきか(もしくはSubにすべきか)という話とは関連が薄い。
2019/02/15(金) 12:04:24.39ID:FxoJIoi60
>>155
別にfunctionの使い方を考えないならどうでもいいじゃない
ただ誰も使わんだろ、それは言い過ぎか使うやつはいるな
2019/02/15(金) 12:06:23.85ID:FxoJIoi60
基本的なことを理解せず、ソース書くやつって恥ずかしくないのかな?
2019/02/15(金) 12:09:16.16ID:GIzZTHxJM
>>157
不思議な意見を言う奴だな?
2019/02/15(金) 12:12:48.44ID:U9ClSHCYM
>>158
ここは、もうやめよう
2019/02/15(金) 12:42:06.25ID:Aa3kOoYYM
俺は理解したいけど使うの自分ならまぁ動けば良いや派です

話題変わるけど今はselenium使えないの?
firefox操作したいけど色々なサイトのコード試しても動かんのだけど最新のseleniumVBAでfirefox操作するVBA使ってる人居たらfirefox起動からログイン処理するコード貼ってほしい
2019/02/15(金) 12:51:15.55ID:Qph8FA2WM
>>157
> 基本的なことを理解せず、ソース書くやつって恥ずかしくないのかな?
確かに>>150は恥ずかしいなw
2019/02/15(金) 12:54:55.89ID:FxoJIoi60
>>161
ふ〜ん、でどのように?(笑)
163デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/15(金) 13:05:41.84ID:QYjRxS22H
配列を使わざるを得ないなら二次元配列に変更前と変更後を並べて突っ込む
2019/02/15(金) 13:08:15.40ID:FxoJIoi60
>>161
まさか、148で変更をBoolean返すようにしたのを前提に150を書いたけど
何も読まずに書いてる?
2019/02/15(金) 13:13:10.46ID:FxoJIoi60
もうやばいけど、バカって好きだな
2019/02/15(金) 13:19:37.16ID:U9ClSHCYM
>>161
で、何か意見は?
2019/02/15(金) 14:34:08.07ID:GIzZTHxJM
>>163
結局そうなるよね。
一括で貼り付ければ楽なのに、わざわざ If でまだらに個別セットなんて却って遅くなる。
2019/02/15(金) 14:59:45.37ID:FxoJIoi60
まあ、しょうがない罠
分かんないんだもの
2019/02/15(金) 15:22:25.20ID:Qph8FA2WM
> 基本的なことを理解せず、ソース書くやつって恥ずかしくないのかな?
とか言いつつ質問者の意向もわからんのにコード書いてドヤるとか w
2019/02/15(金) 15:34:51.44ID:FxoJIoi60
>>169
じゃあ、お前ヒントも書かずにわかるのか?
ってか、引きこもりの文盲か?
2019/02/15(金) 15:36:42.23ID:FxoJIoi60
あっ、すまん、ヒントを書いてもわからないんだよな
2019/02/15(金) 15:43:07.43ID:FxoJIoi60
>>167
どんだけ、アホで生きてるんjンだよ
関数の貼り付けとセルへの値の書き込すらわからんかな
2019/02/15(金) 17:36:05.74ID:Qph8FA2WM
>>170-172
だから
> 基本的なことを理解せず、ソース書くやつって恥ずかしくないのかな?
とかが不思議ちゃんて言われてるんだよ
セルへの書き込み程度でドヤるような奴だからしょうがないだろうけど w
2019/02/15(金) 18:35:03.47ID:U9ClSHCYM
>>173
うふ
175デフォルトの名無しさん (ワッチョイ c701-OvAq)
垢版 |
2019/02/15(金) 19:18:49.62ID:FIDflx8L0
Range("A1")="名前"
Range("A2")="住所"
Range("A3")="性別"
Range("A4")="郵便番号"
みたいな複数にわかる処理を
Range("A1:A4")="名前、住所、性別、郵便番号"みたいな感じ(もちろんこれではダメ)で
一行(一回の処理)でまとめて設定できるような方法ってありますか?
176デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/15(金) 19:20:38.46ID:kIiggQTh0
>>175
ある
2019/02/15(金) 19:21:12.65ID:GIzZTHxJM
Sub kanacaps(s1 As String)
とした場合、
対象配列Aの各要素A(i,j)に対して
kanacaps(A(i, j)) をループで回すだけ。
シートに書き出したければ単にAを貼り付ける。
このとき書き換えがあったかどうかを判定する必要はない。
Function なら
Function kanacaps( ByVal s As String) As String
で A(i, j) = kanacaps(A(i, j))
これも書き換えがあったかどうかを判定する必要はない。
普通は後者を選ぶだろう。
178デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/15(金) 19:28:49.74ID:kIiggQTh0
>>177
これダメなやつ
最も負荷の掛かるセルへのアクセスは最小限にするべき
コードが短ければいいってもんじゃない
2019/02/15(金) 19:37:44.26ID:GIzZTHxJM
>>178
なんだよ
セルの個数の問題なのか貼り付け回数の問題なのかはっきりしろ
180デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/15(金) 20:01:27.87ID:kIiggQTh0
>>179
自分で処理時間計ってみれば?
2019/02/15(金) 20:18:49.96ID:V814XEHD0
>>175
Array
182デフォルトの名無しさん (アメ MM6b-+q6E)
垢版 |
2019/02/15(金) 22:25:19.73ID:f25ghBxYM
まあ、例えばひづ
2019/02/15(金) 22:31:54.84ID:f25ghBxYM
スマホは書いてる途中で書き込んじゃう癖が有って申し訳ない
例えば日付を月日で表しているセルを文字列で取得すると月日の文字が取得できる
その文字をそのセルに書き込むと数値としての月日じゃあなくなるよな
不用意に変換しないことも大事なんだがな
2019/02/15(金) 23:12:49.57ID:f25ghBxYM
気になってshift jis の文字コードを確認してみた
If 166 < c And c < 176 Then
これは半角小文字だよ
お題は全角カタカナ小文字だろっと
2019/02/15(金) 23:38:50.38ID:e71gRKct0
凄いよな。
何でこうも、どんな用途に使うのかわからないような処理ばっか出てくるんだか。

そのうち、VLOOKUP(縦検索)でもHLOOKUP(横検索)でもない、
斜め検索のJLOOKUP作れとか言い出しそうだな。
2019/02/16(土) 00:29:38.87ID:VwWEnU/S0
データ処理の関数がわかんなくてお前らに横投げしてるからだろjk
2019/02/16(土) 01:02:24.60ID:Q7QEPoKZM
まあ何だな 全角カタカナの文字列に半角突っ込む奴の指示は聞かないけどな
2019/02/16(土) 01:38:49.39ID:tkdqnLOdd
最初の質問は>>135だぞ
処理したいのは半角カナ、作りたいのはFunction、関数の返す値は修正後の文字列と仕様が明記されてるのに、どうしてBooleanだのByRefだのが出てくるんだよ
おまけに全角とか言い出すやつまで出てくるし
2019/02/16(土) 02:12:02.80ID:Q7QEPoKZM
ァィゥェォャュョッ 全角小文字
ァィゥェォ 半角小文字
書いてるのが全角だったからな
2019/02/16(土) 02:22:26.92ID:Q7QEPoKZM
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE
(A1,"ァ","ア"),"ィ","イ"),"ゥ","ウ"),"ェ","エ"),"ォ","オ"),"ャ","ヤ")
,"ュ","ユ"),"ョ","ヨ"),"ッ","ツ")
191デフォルトの名無しさん (ブーイモ MM6b-KyI1)
垢版 |
2019/02/16(土) 05:24:29.40ID:evls1zM4M
>>190
ワラ
2019/02/16(土) 05:32:17.75ID:Q7QEPoKZM
素人が素人に頼むとなそうなるわな
(笑)
2019/02/16(土) 07:48:58.08ID:GEWA9gU60
方向が変わったのは>>148がきっかけだよね
2019/02/16(土) 07:53:50.02ID:q1DAaOKG0
>>188-189
そこは最初から違和感あったわ
> VBAで、半角カナ文字列を与えると
って書いてて
> ァィゥェォャュョッ
って全角で書いてるからネタだと思って放置してたけどァィゥェォッュョみたいな文字ってスマホだと入力できないのな
(いや、できるかも知れんが俺にはわからんかったのでこれはコピペで入力した)
まあそれならそうと書いて欲しい

この手の変換はそれなりに需要があるみたいで
カタカナ 小さい文字 変換 vba
とかでググるとそれなりにヒットする
とりあえずは
https://www.relief.jp/docs/002223.html
とかを参考にすればいいと思う
2019/02/16(土) 10:00:10.02ID:uFHexw8O0
スマホで半角カナ小文字の入力は、俺のXperiaの場合だと「la」と入力すると全角小文字の「ぁ」になって、変換を押すと候補に半角「ァ」が出てくる
2019/02/16(土) 10:07:20.68ID:uFHexw8O0
フリック入力ならキーパッドの「ま」の下の「小」をタップすると小文字になって、候補に半角も自動的に出てくる
2019/02/16(土) 13:35:38.12ID:V3lev6Wl0
>>175
1) Range("A1:A4") = WorksheetFunction.Transpose(Split("名前、住所、性別、郵便番号", "、"))

2) Range("A1:A4") = WorksheetFunction.Transpose(Array("名前", "住所", "性別", "郵便番号"))

3) Range("A1:A4") = [{"名前";"住所";"性別";"郵便番号"}]
2019/02/16(土) 14:00:48.72ID:i29F+S9hM
VBAの2次元配列って1次元配列として使えないのね。不便。
199デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/16(土) 14:26:02.22ID:Y5C6RkaG0
二次元配列は何が入ってるか分かりにくいしネストも増えやすいから構造体かクラスを使う
2019/02/16(土) 14:36:39.42ID:eWrDkcRxM
>>198
割り切ってジャグ配列をメインに使えばいい
Rangeはしょうがないけど
2019/02/16(土) 15:38:49.30ID:XgEm9HUa0
>>199
XLシートが二次元の表なんだから難しくないだろ。
三次元なら立体を思い浮かべればいい。四次元になると時間をイメージかな。そこまでやったことないからわからん。
三次元までのネストの深さは気にならないな… ifとかで増えるにしても。増えすぎるなら内部を切り出すかな。
まあ、仕様によってどう作るかはいろいろだけど。
2019/02/16(土) 16:03:55.03ID:kXl7LE8Fx
n次元 = n階層の木構造とイメージするのが単純で良いと思うが
203デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/16(土) 16:14:59.54ID:3bJEG0FOH
>>201
難しくないのにわからんって馬鹿?
2019/02/16(土) 16:41:41.01ID:eWrDkcRxM
n次元より配列の配列の...の方が再帰的に扱いやすい
2019/02/16(土) 17:53:27.66ID:q1DAaOKG0
>>203
日本語不自由?
難しくないのは二次元
わからんのは四次元
206デフォルトの名無しさん (ワッチョイ c701-OvAq)
垢版 |
2019/02/16(土) 22:42:47.76ID:0In5hf0F0
モジュールで
Dim arr() As String
Dim aaa As String
ReDim arr(2)
arr = ThisWorkbook.arr
aaa = arr(0)

ThisWorkbookに下記を設定
Public Function arr() As String()
Dim arra(2) As String
arra(0) = "日本"
arra(1) = "米国"
End Function

Thisworkbookの配列を呼び出したいんですがどこが間違っていますか?
2019/02/16(土) 23:01:11.68ID:V3lev6Wl0
>>206

arr = arra
End Function
2019/02/16(土) 23:03:14.34ID:CD9VXZwW0
エラーメッセージ何よ。
209デフォルトの名無しさん (ワッチョイ c701-OvAq)
垢版 |
2019/02/16(土) 23:06:17.40ID:0In5hf0F0
>>208
インデックスが有効範囲にありません
2019/02/16(土) 23:10:54.03ID:CD9VXZwW0
>>209
ああ、よくある、結局原因がよくわからないやつね。
試したら、>>207が正解だったわ。

面白いな。Thisworkbookに書いてあるものを呼ぼうなんて、
考えたこともなかったから、それが原因かと思ったわ。
2019/02/16(土) 23:17:04.90ID:7Iomz0v50
そもそも配列名とプロシージャ名が同じところもおかしい
2019/02/17(日) 00:05:03.03ID:kxT8s3Mp0
馬鹿はそんなもん
間違いにくいようにコードを書くことをしない
213デフォルトの名無しさん (ワッチョイ 5f7c-We++)
垢版 |
2019/02/17(日) 09:02:57.20ID:hMcsTv+Y0
>>212
コードを書かなきゃ間違えないということか、なるほど。
それとも馬鹿は誤解を受けないような文章を書くことをしないってことか?
214デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 09:28:38.67ID:l7X7saNL0
俺が分かるからいいみたいな考えだとチームで開発はできないよ
215デフォルトの名無しさん (ワッチョイ 5f7c-We++)
垢版 |
2019/02/17(日) 10:19:09.83ID:hMcsTv+Y0
>>214
それはよく解る。保守性も悪くなるよね。
2019/02/17(日) 10:48:02.04ID:1fMGblo0M
一般的なプログラミング言語なら正しいけど、VBAだとかなり厳しくない?
下に合わせるとそれこそ可読性も保守性もクソもないゴミにしかならないよ
2019/02/17(日) 10:53:43.33ID:vi4O111wa
言語は問わず下に合わせるとゴミになる
属人性の排除といって下に合わせたがる人が少なく無いけどあれは間違いなんだ
2019/02/17(日) 11:25:11.92ID:EkiBf8gr0
VBAで下に合わせると、やたらSelect & Selection.Copyが多い、
マクロの自動記録じゃねえのこれ?
みたいなのが出来上がる。
2019/02/17(日) 11:45:18.78ID:7MWZQWrl0
ActiveHogeHoge へ参照が多いとそうなんだろうなと思うことにしている
220デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 11:45:44.34ID:l7X7saNL0
>>216
>>217
>>218
意味が伝わってないみたいだけど
cells(i, 1) = arr(i-1, 0) がセルに何が書き込まれるかはコードの前後を追わないと分からないよね
これを分かるようにするのが分かりやすいコード
プログラミングが上手か下手かは関係ない話
221デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 11:51:57.63ID:l7X7saNL0
多次元配列も Dim lngEleName As Long とか専用ループ変数を準備してるならいいけど、ijkで回してるのを見た日にはそいつを殴りにいくね。
2019/02/17(日) 11:59:45.89ID:plSLxTsM0
ひえー
なんか諸先輩方思うところ多かったようで
自分も書くとき気をつけないと
初心者ですを免罪符にしないように気をつけよう
2019/02/17(日) 12:32:03.24ID:jVC6vo8Y0
>>221
i, j, k でいいよそんなのw
2019/02/17(日) 12:47:43.60ID:1fMGblo0M
>>221
i, j, k で分かりにくくなるような長ったらしいプロシージャを書くのが悪い
225デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 13:16:45.17ID:Nxpc9YF00
>>223
上司「お前クビ」
226デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 13:31:38.58ID:Nxpc9YF00
>>224
プロシージャが簡潔ならおk
2019/02/17(日) 13:42:14.79ID:gMXfU/jdM
>>225
つまらない趣味にこだわるのは中学生までだぞ
2019/02/17(日) 13:49:15.60ID:gMXfU/jdM
偏見かもしれんがプログラミングで日常言語に近づけようとするやつは代数とか苦手だった?
って思っちゃう
229デフォルトの名無しさん (ワッチョイ ff7c-wP4P)
垢版 |
2019/02/17(日) 14:06:36.59ID:7mUUrd8D0
蛇腹erは代数が苦手(キリっ
230デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 14:20:05.25ID:Nxpc9YF00
>>227
上司「このiってなに?ちゃんと説明して」
2019/02/17(日) 14:51:51.50ID:naWxhgEk0
単なるループカウンタですけど?
見ればわかりますよね?
232デフォルトの名無しさん (ワッチョイ bfb7-uWgP)
垢版 |
2019/02/17(日) 14:57:39.75ID:k4RkjrxP0
>>221
Ing Ele ってなんの略ですか
233デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 15:13:51.30ID:Nxpc9YF00
>>232
しばくぞコラ(LongとElementだよ(にっこり))
2019/02/17(日) 15:32:11.89ID:t0Nzx7bGx
ループカウント用のプロシージャ内ローカル変数でiとかjとか使うのはありだと思う
モジュールレベル以上の参照スコープを持たせた変数をiとかjとかarrとかbufとかで宣言されてたら流石にキレるな
2019/02/17(日) 15:36:00.05ID:de8FYcuQ0
スコープが大きいほど変数名も長くして
236デフォルトの名無しさん (ワッチョイ e7b0-3a8x)
垢版 |
2019/02/17(日) 15:43:21.47ID:urjL+jec0
今時ハンガリアン使ってるのクソダサい
237デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 15:49:41.73ID:Nxpc9YF00
俺はゴールデンの方が好き
猫飼ってるから無理だけど
2019/02/17(日) 16:33:33.48ID:Rm6p2g7t0
sheet1, sheet2とあって、sheet1に、
Private Sub ButtonClear_Click()
があります
これをsheet2のボタンを押したときに呼び出したいのですが、sheet2のsubで
Private Sub ButtonTest()
Worksheets("sheet1").Select
ButtonClear_Click
end sub
としてもそんなsubはないと言ってきます。他にもいろいろと試したのですがどうしたらいいのでしょうか
また、標準モジュール内で、

Sub ModuleTest()
Worksheets("sheet1").Select
ButtonClear_Click
end sub
としても同様に動きません
Worksheets("sheet1").ButtonClear_Click
とかしてもダメでした
2019/02/17(日) 16:40:07.44ID:vi4O111wa
共通の処理は共通モジュールかクラスに置いてください
シート1、シート2からはその共通の処理を呼び出してください
イベントハンドラはユーザーコードから呼び出すものではありません
240デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 16:50:40.07ID:Nxpc9YF00
>>238
Privateが付いてるプロシージャはそのモジュール内でのみ呼び出し可能
sheet1とsheet2は別モジュール
だから怒られてる
241デフォルトの名無しさん (ワッチョイ 87da-yQ/S)
垢版 |
2019/02/17(日) 16:54:09.55ID:Bys9dR540
化石みたいなレスのあるスレだな
2019/02/17(日) 17:02:42.50ID:EkiBf8gr0
>イベントハンドラはユーザーコードから呼び出すものではありません

面倒くさいとき、普通に呼び出してたわ。
2019/02/17(日) 17:18:01.63ID:Rm6p2g7t0
>>240
Public にしてもはずしてもダメです
2019/02/17(日) 17:22:34.48ID:kxT8s3Mp0
馬鹿はClassを知らない
2019/02/17(日) 17:57:40.00ID:EkiBf8gr0
>>243
>>206みたいにしても?
246デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 18:15:37.59ID:l7X7saNL0
>>243
そもそもボタンってデフォで標準プロシージャに追加されなかったっけ?
標準モジュール作って、Sub ButtonClear_Click() をまるごと移動させたらいけんじゃね?
247デフォルトの名無しさん (ワッチョイ 5f7c-We++)
垢版 |
2019/02/17(日) 18:27:30.13ID:hMcsTv+Y0
>>244
そんくらい知ってるよ、夏の日の1993だろ。
昭和生まれをナメるなよ。
2019/02/17(日) 18:37:55.36ID:Rm6p2g7t0
調べてたらこんなのが出てきました
http://jscript.zouri.jp/Source/ExcelCtrl.html#LINK7
ちょっとずれてはいますが、ここで

// シートのマクロ関数を呼び出す
ExcelApp.Run( "MacroTest.xls!Sheet1.func1" );
ってのがあるから、標準モジュールだけじゃなくて、シートの関数も他のシートからも呼べるんだよね
マネてやってみたんだけどうまくいかん
2019/02/17(日) 18:52:24.20ID:EkiBf8gr0
いや、普通に、シートを指定するんじゃ駄目のかな。
>>206はThisworkbookに続けて関数名書いてるけど。
クラスモジュールもそうやって指定するでしょ?
2019/02/17(日) 18:53:32.60ID:X48frccGd
???
lngEle?なんかよりi,j,kの方がよっぽど良いだろ。
どんなスコープの場合でも特別な意味の無いループ変数だよ。
世界中で、さらにいうと他言語でも共有されてる価値観だろ。
まあ、ローカル以外で使われることは無いけど。
251デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 19:03:59.23ID:l7X7saNL0
シートモジュール特有の制約があるのかもしれないけど調べるのめんどい
2019/02/17(日) 19:07:37.68ID:X48frccGd
>>238
根本的に考え方が分かっていない。
まず、色んな所から呼び出したいものは標準モジュールに書く。
そして、そいつを色んな所から利用するように設計する。

君の場合はButtonClear_ClickをSheet1からもSheet2からも使いたいんだからButtonClear_Clickの中身を別関数にして、Sheet1のButtonClear_Clickからその関数を呼び出すようにする。
2019/02/17(日) 19:09:51.42ID:vi4O111wa
vbaerは他の言語やらんから非常識なコードを悪気なく書いてしまうんだよな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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