Excel VBA 質問スレ Part61

■ このスレッドは過去ログ倉庫に格納されています
2019/04/25(木) 23:41:03.61ID:rni/4bMj0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part60
https://mevius.5ch.net/test/read.cgi/tech/1552736349/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/04/27(土) 12:54:30.18ID:Nwb++xAe0
>>9
悔しいから反応してるんだろww
2019/04/27(土) 13:03:37.89ID:Nwb++xAe0
>>14
それ、前スレで言われてた副作用のある操作は難しいってのに該当する。

セルに入力中はVBAの実行が普通は出来ないから。
2019/04/27(土) 13:09:43.12ID:V/rwcmys0
ActiveSheet.Cells(1, 1) = "シート名一覧"
Dim iIndex As Integer

For iIndex = 1 To Worksheets.Count
ActiveSheet.Cells(iIndex + 1, 1) = Worksheets(iIndex).Name
Next iIndex

全く何がしたいのかわからない
2019/04/27(土) 13:11:56.45ID:Nwb++xAe0
>>20
それをfunctionにしてセルの中からよび出そうとしてる。

それでは動かない筈。
2019/04/27(土) 13:15:34.87ID:aEScOWQbx
>>14
ActiveCellが悪さしてそう
シート名を二次元配列に格納してセルにペーストした方が速いだろう
2019/04/27(土) 13:19:58.15ID:0MG9/7scr
sheet1と表示されるなら、sheet2がないためエラーが発生してるんじゃない
関数は個人用マクロブックとかに書いてあるとか
2019/04/27(土) 13:20:05.54ID:V/rwcmys0
>>21
そんなの単純に
A1 =fnEnumSheetName() と入力すると
このファンクション内で最初に書き換えるから?最初でなくても矛盾が生じる
から、動かなくても問題ない、そこに居れた式を書き換えたらなりたたない

当然だろ、何か考える必要あるのか?
2019/04/27(土) 13:25:15.46ID:Nwb++xAe0
>>24
いや、だから元々の質問は成り立たせたいわけだろ。
2019/04/27(土) 13:28:49.05ID:Nwb++xAe0
あと、シート自体にロックが掛かってるから入力中は動かないよ。
2019/04/27(土) 13:36:42.57ID:V/rwcmys0
>>25
単純に考えても成り立たないだろ、ってかセキュリティもあったもんじゃなくなる
式を「A1」に入れて「A1」を書き換えたら
2019/04/27(土) 13:38:26.20ID:S53FxUuZ0
ありがとうございます

ブック名を指定しても
A1にシート名一覧を表示しないようにしても
同じ結果でした
2019/04/27(土) 13:42:36.94ID:V/rwcmys0
>>28
すまないけど、人に分かるように書き込みできんのかな?
2019/04/27(土) 13:42:59.47ID:S53FxUuZ0
混乱してるみたいなのでまとめます

>>14の状態(コメントアウト有り)では
A1のシート名一覧は表示され
Debug.PrintもSheet1〜Sheet3まで表示されます
コメントアウトしている部分で書き換えているのはA2〜A4です
2019/04/27(土) 13:44:30.42ID:rUmkpmPg0
>>18
>>18ww
2019/04/27(土) 13:47:01.70ID:S53FxUuZ0
>>29
fnEnumSheetName = "シート名一覧" 'ここはコメントアウトしなくても問題無い

という事です
2019/04/27(土) 13:47:02.53ID:0MG9/7scr
すまんかった
>19が正解っぽい
sheet1だけなら
fn〜=application.thiscell.parent.nameで拾える
A1を書き換えようとすると2016では循環参照の警告がでる
2019/04/27(土) 13:52:49.27ID:S53FxUuZ0
>>33
そうなんですね

ではA1には式を入力するだけという事にしておいてください
ですがそれでも解決はしません

ActiveCellの部分を他の方法でやってみます
2019/04/27(土) 14:02:54.56ID:V/rwcmys0
>>34
独自関数は、自分のセルを計算するだけにしておけよ
それ以外を許すと全く分からなくなる
その程度のことも判断しないとな
2019/04/27(土) 14:16:52.17ID:S53FxUuZ0
>>35
失礼ですがあなたの指摘(A1が云々)は本題とは関係無いんです
コメントアウトしても同じ結果だったので
2019/04/27(土) 14:42:51.99ID:Nwb++xAe0
>>31
その反応が面白いwww
2019/04/27(土) 14:50:38.26ID:Nwb++xAe0
>>30
だから、コメントアウトしたのは入力したシート内のセルに入力するコードだろ。

そういうのは普通は動かないんだ。
動かすことは出来るけど難しい。
例えばA1に途中迄入力してセル内カーソルがある状態でVBAを動かそうとしても動かない。

じゃあ、どうやってやるかと言えばSetTimerを使えば出来る。
ただし、使いなれた人じゃないと大変危険だ。
2019/04/27(土) 14:51:15.82ID:rUmkpmPg0
>>37
>>18w
2019/04/27(土) 14:52:49.56ID:Nwb++xAe0
まあ、実際の所、>>35に賛成だね。
こういう処理はセルへの入力をトリガーにすべきじゃないな。
2019/04/27(土) 14:53:11.87ID:Nwb++xAe0
>>39
悔しいから反応するわけだw
2019/04/27(土) 14:55:56.58ID:b8TiPyfa0
>>36
関数内で配列を作って返し、複数セルにわたって配列数式での入力(ctrl + shift + Enter)にすればできる
2019/04/27(土) 15:16:12.29ID:rUmkpmPg0
>>41
>>18
痴呆は同じ事を何度も繰返す
まあその程度の知恵しかないからしょうがないんだろうけどw
2019/04/27(土) 15:17:32.57ID:S53FxUuZ0
配列にしたらできました
ですがシート数が固定ではなくセル選択範囲がネックになるので
ボタンをトリガーにして当初のコードを利用する事にします

ありがとうございました
2019/04/27(土) 15:26:37.85ID:b8TiPyfa0
>>44
配列の長さを越える範囲を選択しても下の方が#NAになるだけで上側は有効だけど、
確かに見苦しいからそのやり方の方がいいだろうね
2019/04/27(土) 15:43:11.43ID:t5jYwzHf0
>>14
Excelの決まりとしてセルに入れた数式の結果はあくまでそのセルだけのもの
他のセルを弄るというのはセル数式の領域外
だからActiveCell.Offset〜があるとエラーになる
こういう場合はコマンドボタンとか付けてそれ押したら指定先のセルに表示するとかする
2019/04/27(土) 17:29:07.12ID:S53FxUuZ0
ありがとうございます
2019/04/27(土) 19:02:45.87ID:oGcERCTJM
シートの上限を制限できるなら
Public Function fnEnumSheetName(Index As Integer) As String
If 1 <= Index And Index <= ActiveWorkbook.Worksheets.Count Then
fnEnumSheetName = ActiveWorkbook.Worksheets(Index).Name
Else
fnEnumSheetName = ""
End If
End Function
を定義して
A1に =fnEnumSheetName(Row()) を入力
あとは必要分を A2 から下に関数コピーすればいい
2019/04/27(土) 19:51:55.22ID:Nwb++xAe0
>>43
プッw
自己矛盾は認めるのかw
2019/04/27(土) 19:56:38.58ID:vRc/Njpl0
色々なシートを触る時、.activateは入れますか?

set sheets("sheet1") = foo
set sheets("sheet2") = bar
foo.activate
foo.cells(1,1)="str"
bar.activate
bar.cells(1,1)="str"

要は
cells(1,1)="str"
とシート名を抜かしてしまった時の保険なんですが、止めたほうが良いでしょうか?
また、シート名を忘れた時にエラーが出る等、わかるようにする方法ってありますか?
2019/04/27(土) 20:12:40.86ID:Nwb++xAe0
Activateなんて殆ど使うことは無い。
と言うより、シート名を抜かすことなんて有り得ないというくらい無い。
寧ろブックも省略しない。
だからWithかSet sht=Workbooks("hoge.xlsx").Worksheets("fuga")
をたいてい使う。
2019/04/27(土) 20:13:58.60ID:Nwb++xAe0
ああ、よく見てなかった。
Set使ってるじゃん。
それなのに抜かすことが有るの?
2019/04/27(土) 20:15:01.27ID:Nwb++xAe0
よく見たら間違ってた。
2019/04/27(土) 20:39:24.98ID:vRc/Njpl0
>>52
はい
もちろん最初からこの形なら良いのですが、
1シートしか使わないマクロでシート名を抜いて記述
その後、2シート以上に増えた時、改修する時に抜ける事があるのです
1シートだけでもシート記述した方が良いんでしょうかねぇ
2019/04/27(土) 20:53:55.77ID:Nwb++xAe0
>>54
関係ない。
というか染み付いた方が良いと思うよ。
シート数がどうとか考えることもなく自分は省略しない。
それにブックを複数開くことって無いの?
2019/04/27(土) 21:40:11.04ID:t5jYwzHf0
>>50
原因がわからないエラーじゃないんだから保険ではなくきちんと明示するようにしよう
書き忘れてエラーが出たらそれをちゃんと直すようにしよう
中途半端な保険なんて入れておくとますます不備に気付けない
自分の簡単なチェック方法は前にドットがついてないrangeとcellsを全部検索するようにしてる
2019/04/27(土) 21:53:22.78ID:rUmkpmPg0
>>49
まだ言ってるのかw
それを自己矛盾と言張るならお前も根拠出せって話な
2019/04/27(土) 21:56:32.16ID:JuyaDe8h0
>>55
ありがとうございます
癖にしていきます

ブックを複数開く事は滅多に無いです
基本的にそのブックにマクロをもたせるようにしています
2019/04/27(土) 21:58:54.29ID:rUmkpmPg0
>>50
シート名忘れるような奴はそのうちActivate指定も忘れたり間違えたりすると思うぞ
そもそもそんな保険を掛ける前に
> set sheets("sheet1") = foo
とか書いて疑問に思わない自分の頭を心配した方がいい
2019/04/27(土) 22:03:53.98ID:Nwb++xAe0
>>57
www
正式な方法があるか無いか分からないのに「無い」と言い切ったことが根拠だと何度言ったらww
2019/04/27(土) 22:11:38.42ID:JuyaDe8h0
>>59
それもそうですね
ちゃんと書くようにします

そして酷い間違いすいません
2019/04/27(土) 22:24:21.55ID:rUmkpmPg0
>>60
それじゃねーよ、バーカ
これの根拠書けって話な

>> 857
On Errorしかないのが正式なら同じだし、
On Error以外に正式なものがあれば問題ないし、
2019/04/28(日) 03:00:41.86ID:4bLnIwms0
スポーツの試合だとお互いの実力が拮抗していると長くなるよね
2019/04/28(日) 08:28:37.40ID:FKjutIP90
>>20
> ActiveSheet.Cells(1, 1) = "シート名一覧"
これはセルの値を変更だろ
下のは式としては=Test()で表示としてはSampleになるから別物
混乱させようとした愉快犯か?

Public Function Test() As String

Test = "Sample"

End Function
2019/04/28(日) 08:33:01.60ID:sJuQcHaM0
SubよりFunctionの方が格好いいような気がして、
意味もなくFunction使っちゃうんですよ。
何でしょうね。
2019/04/28(日) 09:30:57.39ID:Cfig35XD0
>>64
おっさん、その話もう終わってるぞ
2019/04/28(日) 12:29:42.70ID:dIRL+egd0
>>65
個人用ならどうでもいいよ
オレが関わる(他人も使う)なら、糞ボケ春日と言わせてもらう
2019/04/28(日) 13:02:26.00ID:EgFNocvh0
>>62
その根拠www

>>60は根拠そのものなんだがwww

お前は1+1=5だと言っている。
俺はそんなの全く説得力が無いと言っている。
何故なら1+1=5の根拠を全く示していないからだ。

今の状態は1+1=5だとお前が妄想しただけとしか受け取れない状態だ。
妄想でも構わんが何ーつ説明出来ていないんじゃ説得力が全く無いのは自明の理だ。
←これが俺の根拠だ。
それで全て。

バカで理解出来ないようだからもう−度言う。
今言ってるのはお前が自己矛盾してるかどうかだ。
正式な手順があるだろうという俺の主張の話は何ーつしていない。
前にも書いたが一緒にして逃げを打たれても困るんでな。
2019/04/28(日) 13:18:46.95ID:2hWtotY90
>>65
意味はあるからしっかり使い分けなよ
2019/04/28(日) 13:37:52.21ID:Cfig35XD0
>>68
だから俺の主張がMSに確認してないから根拠がないと言うならお前も根拠を出せよっていうだけの話
そもそも俺がMSに確認してないという根拠すら出せないだろ?w
2019/04/28(日) 13:46:53.43ID:QZJPb34xd
>>70
バカ?
1+1=5と言われて信じる奴が何処にいる?
だから根拠を出せと言っている。
根拠を出せなければ信頼に値しない。

俺がお前の根拠を示す必要は全く無い。
2019/04/28(日) 13:50:31.23ID:hyHYBmToF
>>70
いや、お前が確認してるなら根拠を出せば良い。
出さなければ信頼に値しない。

で、今までお前は根拠を出さなかった。
従ってお前の主張は信頼に値しない。

これが根拠だから俺がMSに何かを確認しても、それは根拠には成らん。
2019/04/28(日) 13:51:35.95ID:QZJPb34xd
>>70
いや、お前が確認してるなら根拠を出せば良い。
出さなければ信頼に値しない。
それだけのことだから俺にはMSに何かを確認する意味がない。

で、今までお前は根拠を出さなかった。
従ってお前の主張は信頼に値しない。

これが根拠だから俺がMSに何かを確認しても、それは根拠には成らん。
2019/04/28(日) 14:52:10.80ID:HssTnoLvr
on errorで出来てるし、もしMSにきいたとして
来る回答のパターンは
on error
on error以外
出来ない
くらい?出来ないはないと思うんで、
on errorが正式か、正式が別にあるんじゃないかな
2019/04/28(日) 15:05:52.13ID:QZJPb34xd
>>74
俺もその主張をしているけど、ここでの問題はその議論とはちがう。

確認もせずに>>70が「言い切った」ことが問題。

>>74の主張の正否とは関係なく「言い切った」ことは間違ってると言っている。
2019/04/28(日) 17:22:26.95ID:Cfig35XD0
>>75
> 確認もせずに
だから俺が確認して無いって言う根拠を示せよw
当然できるんだよね?
2019/04/28(日) 17:27:07.37ID:Cfig35XD0
>>74
> くらい?出来ないはないと思うんで、
なぜそう思う?
正式にはそんな機能はありませんとか回答する可能性はかなり高いと思うぞ
そもそもOn Errorの方法自体がかなりトリッキーだし
2019/04/28(日) 19:36:02.91ID:eejI4zUeF
>>76
www
バーカwww

お前が確認しようがしまいがそれをここで提示出来てないから説得力無いと言っている。
提示出来なければ確認してても何の意味も無い。
2019/04/28(日) 19:36:28.72ID:eejI4zUeF
>>77
また逃げを打つwww
2019/04/28(日) 19:38:22.48ID:eejI4zUeF
>>77
トリッキーじゃないのは既に示した。
2019/04/28(日) 20:00:47.17ID:Cfig35XD0
>>78
説得力の有無なんて関係ないだろ
お前が根拠を示せてないと言う「事実」があるだけ

>>79-80
で?
その方法はMSから回答もらったのか?w

あと念の為に言っとくけど、普段はこんなアホなことは言わんよ
「MSに確認」を執拗に要求するアホがいるから、人に要求するなら自分も根拠を示せというだけのこと
2019/04/28(日) 20:26:37.62ID:gBjA4ugeF
>>81
ほら、また自己矛盾だ。
バカだから気付いていないwww
2019/04/28(日) 20:48:30.04ID:Eb5haylPx
VBAに拘る人種の何たるかが分かるレスバだね
関わらないのが一番
2019/04/28(日) 20:50:38.73ID:JRvhyTXgd
結局、バカがトリッキーだと思っただけのことをさも確定であるかのように騙ってただけのことだった
2019/04/28(日) 20:52:28.34ID:sT0U/wAv0
>>77
それがトリッキーなら前スレ848
>例えば昔仕事で扱ったWin32APIのGetPrinterでは取得するPinterInfo2構造体のサイズを0にして渡して敢えて失敗させることによって正しい構造体のサイズを取得するなんてのがある。
もトリッキーでしょ
2019/04/28(日) 20:53:46.89ID:JRvhyTXgd
>>81は騙り確定だな。
2019/04/28(日) 21:29:15.72ID:Cfig35XD0
>>82
もうそういう具体性のかけらもないレスしかできないかな?

>>84-86
まともなプログラマーならドキュメントに明記されてることとそうでないことの区別ぐらいは付きそうなもんだけどな
まあ今更引っ込みつかないんだろうなw
2019/04/28(日) 23:17:35.58ID:+Ppdot+Mr
そうでないからMSに確認しないとわからない
回答がドキュメント代わりになる
2019/04/29(月) 00:24:17.00ID:XyJHv5T1d
フォームから10個のTextboxに書かれた情報をボタン投下時にTextfileに一列タブ区切りで追記するもの。(空もあり)
それと、そのTextfile読み取って全列一列ずつExcelに転記出来るものを作り、内容を変更したりした後、再びTextfileにoutputするものを作りました。

そのTextfileの中ワードを検索し該当する行をタブ区切りで配列に格納してリストビューに転記するものを作ったんですが、たまに配列数0から7個だったり少なくて転記の際にエラーになるのはなんかありますか?
2019/04/29(月) 05:45:36.38ID:lr8PSWgy0
>>89
回答じゃないけど、テキストファイルに書くんじゃなくて(隠し)シートに書いてやるのはダメなの?
2019/04/29(月) 05:52:06.61ID:atpu4K080
>>88
必要なら君がやればいいだけ
そんなこともわからないの?
2019/04/29(月) 06:00:11.68ID:atpu4K080
>>89
取り敢えずエラーになった時のTextfileは確認したの?
2019/04/29(月) 08:59:53.28ID:3KqibFAl0
>>87
www

説得力が無くて良いならお前はもう反論出来ないということだよ。
俺の主張に説得力が無くても良いと表明したんだからなw

俺は説得力が無くても良いとは思わないから、お前は騙り確定だw
2019/04/29(月) 09:02:43.11ID:3KqibFAl0
>>91
だから必要なのは正式ではないと決めつけたお前なんだよwww

バカだなあw
2019/04/29(月) 10:26:14.89ID:atpu4K080
>>93
説得力が無い?
> 説得力の有無なんて関係ないだろ
> お前が根拠を示せてないと言う「事実」があるだけ
って書いてあるんだが、ひょっとして違いがわかってないのか?w
2019/04/29(月) 11:05:38.54ID:3KqibFAl0
>>95
バーカwww
根拠は示せてるで確定だwww

お前は「根拠は示せてる」に反論出来ないwww
2019/04/29(月) 11:07:23.49ID:3KqibFAl0
>>95
お前自ら、反論出来ないと表明しちまったんだよw
2019/04/29(月) 11:18:46.73ID:3KqibFAl0
>>95
根拠は示したという俺の主張が「事実」であり、それにお前は自ら説得力が無くても良いと言ってしまった。

一方、根拠は示されていないというお前の主張に説得力が無くても良いとは言わない。

従って、お前は反論出来ないが俺はいくらでも反論させて貰うw
2019/04/29(月) 11:30:15.17ID:3KqibFAl0
そもそも根拠は何の為に必要なのかと言えば、主張に説得力を出すためだ。
相手に求めるのも説得力が無いから説得力を出すために根拠を提示しろということだ。

そんなこともわからないんだから全く意味不明。
2019/04/29(月) 11:46:18.60ID:atpu4K080
>>96-99
> 根拠は示せてるで確定だwww
ほう、どこで示せてるんだ?
レス番示して引用してみな

まあ、どうせまたごまかすんだろうけどw
2019/04/29(月) 12:16:53.98ID:4bYMRVF+0
そろそろ、無意味な言い争いやめたら、だんだん何したいかわからん
2019/04/29(月) 12:55:19.18ID:3KqibFAl0
>>100
お前の理論によればもはや示す必要もないwww
残念でしたwww

説得力無くて良いんだろw
2019/04/29(月) 12:57:44.87ID:3KqibFAl0
説得力無くても良いと言ったんだから不必要なものを求めるな。
バカがw
2019/04/29(月) 13:04:31.07ID:atpu4K080
>>102
> お前の理論によればもはや示す必要もないwww

はい、想像通りでしたw
>> まあ、どうせまたごまかすんだろうけどw

> 説得力無くて良いんだろw
そう言うこと、匿名掲示板でMSに確認ガーとか言い出したらキリがない
常識が通じない相手とはやり取りが困難って言うだけのこと

>>101
スレ跨いで粘着するような人なので察してやってくださいなw ⇒ >>7
まあ連休で暇だからと言って相手してる俺も悪いんだけどね
2019/04/29(月) 13:10:55.90ID:3KqibFAl0
>>104
www
バーカwww

本当にバカだな。

説得力が必要なければ、ここは意味が無い。
それどころか全ての議論は意味が無い。

MSに確認は説得力を増すための十分条件だが、必要条件では無いから必ず必要なわけじゃ無い。
しかしお前は何−つ説明をしていない。

その上で説得力を必要無いなどとバカを晒した。
それじゃ議論の意味が無いからお前がここで何かを主張するのも意味が無いと自分で表明したことになる。

本当にバカだ
2019/04/29(月) 13:45:41.26ID:5oVU+kiox
>>89
テキストボックスが空だったときのテキスト出力に問題がありそう
エラーが出たときのテキストボックスの入力状態を再現できるなら、個々の値の転記処理が終わる箇所にブレークポイントを設定して、テキストファイルの区切り文字の数とかをダンプして確かめるといいよ
2019/04/29(月) 13:54:02.85ID:atpu4K080
> その上で説得力を必要無いなどとバカを晒した。
まず日本語のてにをはからやり直せよ…
頭に血が上りすぎだろw
2019/04/29(月) 14:14:07.86ID:KquSHPZdd
>>107
不必要なことをするなw
バカがwww
2019/04/29(月) 14:33:48.02ID:ctIEF5n7F
だいたい、てにをはを分かって無いのはどっちだよ。
2019/04/29(月) 14:37:09.09ID:atpu4K080
指摘されてアタフタw
2019/04/29(月) 14:46:16.98ID:KquSHPZdd
>>110
反論出来なくて悔しいのうw
2019/04/29(月) 14:55:19.39ID:atpu4K080
>>111
既に結論出してるからね

>> 説得力無くて良いんだろw
> そう言うこと、匿名掲示板でMSに確認ガーとか言い出したらキリがない
> 常識が通じない相手とはやり取りが困難って言うだけのこと
2019/04/29(月) 15:21:29.32ID:KquSHPZdd
お前が自ら反論出来ませんと宣言した結論がなwww
2019/04/29(月) 15:22:16.26ID:KquSHPZdd
>>112
自分がアホなことを言った責任を取れw
2019/04/29(月) 15:23:08.17ID:KquSHPZdd
常識が通じないことを言い出したのは自分じゃねーかw
2019/04/29(月) 16:08:31.29ID:atpu4K080
バカが何か喚いてるなw
> そう言うこと、匿名掲示板でMSに確認ガーとか言い出したらキリがない
2019/04/29(月) 17:26:09.94ID:KquSHPZdd
>>116
反論出来なくなって議論を放棄したバカはお前だろw
2019/04/29(月) 17:33:18.07ID:wwUmbZI/M
>>117
バカが何を喚いても
> そう言うこと、匿名掲示板でMSに確認ガーとか言い出したらキリがない
という事実は変わらない
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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