TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
C++は難しすぎ 難易度:4
【アンチ】関数型言語は使えない【玩具】 2
インデントを強制しても綺麗なコードにはなりません
古代VBプログラマ質問スレ(Ver.6.0 まで) part65
【COBOLから】バッチ処理【Javaまで】
Excel VBA 質問スレ Part54
JavaScript情報交換所(プログラミング既習者専用)
ほぼ初心者プログラマでするべき事がわからない
datファイルを共有するP2Pソフト o2on 17dat
Jenkins

Excel VBA 質問スレ Part61


1 :
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part60
https://mevius.2ch.sc/test/read.cgi/tech/1552736349/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured

2 :
>>998
>おっさん、それじゃ値が二つできてしまう

出来て良いんだよ。
どうせ2つあっても上の値しか拾わないし。

3 :
まだやってるのか

4 :
番兵の方を拾った場合は?

5 :
usedrange.columns.count は多用しますが
これを列番号ではなく
アルファベットで(AX列、というように)
取得することはできますか?

6 :
>>5
あ、addressメソッドがありました。
自己解決しました。

7 :
よっぽど自己矛盾について触れて欲しく無かったようだな。

>>973>>857はその後だと言ってるのに。

8 :
ネットワーク上のMDBファイルにADOで接続して取ってきたデータを帳票に表示→印刷というマクロを作りました
しかし1件なら問題ないものの、ループ実行すると正常終了で終わるのですが
実際に印刷すると2件目以降のデータが反映されず、全て1件目のデータが印字されます
どうもMDBから取ってくる部分のタイミングの問題に見える(その部分に差し掛かると画面が固まる。DoEventsを入れずに重い処理をさせたときの感じ)のですが、SleepやDoEventsを適宜挟んだり、印刷ではなく別ブックやpdfに書き出しなどに変更しても効果が見えません

この現象の解消方法をご存知の方いませんか?

9 :
>>7
まだやってるのかよ
悔しがりすぎww

10 :
>>8
言ってることがよくわからんけど、adoで直結してデータとってきてるなら、doevents挟んでも意味ない
なので、そもそもバグってると思われる。

doeveが効果あるのは、間接的に(と言って伝わるかわからんけど)何か処理するとか表示を反映させるとかの場合

11 :
>>8
俺も単なるプログラムミスだと思う
謎々シテナイデソース貼れよ

12 :
movenextが無いとかループカウンタが加算されていないとか

13 :
ブレイクポイント置いたり、debug.print挟んだりするのは、
基本のキ

14 :
Sheet1, Sheet2, Sheet3 がある状態で
A1 =fnEnumSheetName() と入力すると
A1 シート名一覧
A2 Sheet1
A3 Sheet2
A4 Sheet3
と表示されるようにしたいのですが
A1に#VALUE!と表示されDebug.PrintがSheet1しか表示しません
期待通りにするにはどう修正すればいいですか?
For文3行目のコメントアウトを外すとDebug.PrintとA1の表示は期待通りです

'シート名列挙
Public Function fnEnumSheetName() As String

Dim iIndex As Integer

For iIndex = 1 To Worksheets.Count
Debug.Print Worksheets(iIndex).Name
' ActiveCell.Offset(iIndex, 0).Value = Worksheets(iIndex).Name
Next iIndex

fnEnumSheetName = "シート名一覧"

End Function

15 :
訂正です
× For文3行目のコメントアウトを外すとDebug.PrintとA1の表示は期待通りです
○ For文3行目をコメントアウトするとDebug.PrintとA1の表示は期待通りです

16 :
ブック名を入れてみたら

17 :
for iIndex=1 to workbooks("xxx.xls").sheets.count
workbooks("xxx.xls").sheets(iIndex).name

18 :
>>9
悔しいから反応してるんだろww

19 :
>>14
それ、前スレで言われてた副作用のある操作は難しいってのに該当する。

セルに入力中はVBAの実行が普通は出来ないから。

20 :
ActiveSheet.Cells(1, 1) = "シート名一覧"
Dim iIndex As Integer

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

全く何がしたいのかわからない

21 :
>>20
それをfunctionにしてセルの中からよび出そうとしてる。

それでは動かない筈。

22 :
>>14
ActiveCellが悪さしてそう
シート名を二次元配列に格納してセルにペーストした方が速いだろう

23 :
sheet1と表示されるなら、sheet2がないためエラーが発生してるんじゃない
関数は個人用マクロブックとかに書いてあるとか

24 :
>>21
そんなの単純に
A1 =fnEnumSheetName() と入力すると
このファンクション内で最初に書き換えるから?最初でなくても矛盾が生じる
から、動かなくても問題ない、そこに居れた式を書き換えたらなりたたない

当然だろ、何か考える必要あるのか?

25 :
>>24
いや、だから元々の質問は成り立たせたいわけだろ。

26 :
あと、シート自体にロックが掛かってるから入力中は動かないよ。

27 :
>>25
単純に考えても成り立たないだろ、ってかセキュリティもあったもんじゃなくなる
式を「A1」に入れて「A1」を書き換えたら

28 :
ありがとうございます

ブック名を指定しても
A1にシート名一覧を表示しないようにしても
同じ結果でした

29 :
>>28
すまないけど、人に分かるように書き込みできんのかな?

30 :
混乱してるみたいなのでまとめます

>>14の状態(コメントアウト有り)では
A1のシート名一覧は表示され
Debug.PrintもSheet1〜Sheet3まで表示されます
コメントアウトしている部分で書き換えているのはA2〜A4です

31 :
>>18
>>18ww

32 :
>>29
fnEnumSheetName = "シート名一覧" 'ここはコメントアウトしなくても問題無い

という事です

33 :
すまんかった
>19が正解っぽい
sheet1だけなら
fn〜=application.thiscell.parent.nameで拾える
A1を書き換えようとすると2016では循環参照の警告がでる

34 :
>>33
そうなんですね

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

ActiveCellの部分を他の方法でやってみます

35 :
>>34
独自関数は、自分のセルを計算するだけにしておけよ
それ以外を許すと全く分からなくなる
その程度のことも判断しないとな

36 :
>>35
失礼ですがあなたの指摘(A1が云々)は本題とは関係無いんです
コメントアウトしても同じ結果だったので

37 :
>>31
その反応が面白いwww

38 :
>>30
だから、コメントアウトしたのは入力したシート内のセルに入力するコードだろ。

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

じゃあ、どうやってやるかと言えばSetTimerを使えば出来る。
ただし、使いなれた人じゃないと大変危険だ。

39 :
>>37
>>18w

40 :
まあ、実際の所、>>35に賛成だね。
こういう処理はセルへの入力をトリガーにすべきじゃないな。

41 :
>>39
悔しいから反応するわけだw

42 :
>>36
関数内で配列を作って返し、複数セルにわたって配列数式での入力(ctrl + shift + Enter)にすればできる

43 :
>>41
>>18
痴呆は同じ事を何度も繰返す
まあその程度の知恵しかないからしょうがないんだろうけどw

44 :
配列にしたらできました
ですがシート数が固定ではなくセル選択範囲がネックになるので
ボタンをトリガーにして当初のコードを利用する事にします

ありがとうございました

45 :
>>44
配列の長さを越える範囲を選択しても下の方が#NAになるだけで上側は有効だけど、
確かに見苦しいからそのやり方の方がいいだろうね

46 :
>>14
Excelの決まりとしてセルに入れた数式の結果はあくまでそのセルだけのもの
他のセルを弄るというのはセル数式の領域外
だからActiveCell.Offset〜があるとエラーになる
こういう場合はコマンドボタンとか付けてそれ押したら指定先のセルに表示するとかする

47 :
ありがとうございます

48 :
シートの上限を制限できるなら
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 から下に関数コピーすればいい

49 :
>>43
プッw
自己矛盾は認めるのかw

50 :
色々なシートを触る時、.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"
とシート名を抜かしてしまった時の保険なんですが、止めたほうが良いでしょうか?
また、シート名を忘れた時にエラーが出る等、わかるようにする方法ってありますか?

51 :
Activateなんて殆ど使うことは無い。
と言うより、シート名を抜かすことなんて有り得ないというくらい無い。
寧ろブックも省略しない。
だからWithかSet sht=Workbooks("hoge.xlsx").Worksheets("fuga")
をたいてい使う。

52 :
ああ、よく見てなかった。
Set使ってるじゃん。
それなのに抜かすことが有るの?

53 :
よく見たら間違ってた。

54 :
>>52
はい
もちろん最初からこの形なら良いのですが、
1シートしか使わないマクロでシート名を抜いて記述
その後、2シート以上に増えた時、改修する時に抜ける事があるのです
1シートだけでもシート記述した方が良いんでしょうかねぇ

55 :
>>54
関係ない。
というか染み付いた方が良いと思うよ。
シート数がどうとか考えることもなく自分は省略しない。
それにブックを複数開くことって無いの?

56 :
>>50
原因がわからないエラーじゃないんだから保険ではなくきちんと明示するようにしよう
書き忘れてエラーが出たらそれをちゃんと直すようにしよう
中途半端な保険なんて入れておくとますます不備に気付けない
自分の簡単なチェック方法は前にドットがついてないrangeとcellsを全部検索するようにしてる

57 :
>>49
まだ言ってるのかw
それを自己矛盾と言張るならお前も根拠出せって話な

58 :
>>55
ありがとうございます
癖にしていきます

ブックを複数開く事は滅多に無いです
基本的にそのブックにマクロをもたせるようにしています

59 :
>>50
シート名忘れるような奴はそのうちActivate指定も忘れたり間違えたりすると思うぞ
そもそもそんな保険を掛ける前に
> set sheets("sheet1") = foo
とか書いて疑問に思わない自分の頭を心配した方がいい

60 :
>>57
www
正式な方法があるか無いか分からないのに「無い」と言い切ったことが根拠だと何度言ったらww

61 :
>>59
それもそうですね
ちゃんと書くようにします

そして酷い間違いすいません

62 :
>>60
それじゃねーよ、バーカ
これの根拠書けって話な

>> 857
On Errorしかないのが正式なら同じだし、
On Error以外に正式なものがあれば問題ないし、

63 :
スポーツの試合だとお互いの実力が拮抗していると長くなるよね

64 :
>>20
> ActiveSheet.Cells(1, 1) = "シート名一覧"
これはセルの値を変更だろ
下のは式としては=Test()で表示としてはSampleになるから別物
混乱させようとした愉快犯か?

Public Function Test() As String

Test = "Sample"

End Function

65 :
SubよりFunctionの方が格好いいような気がして、
意味もなくFunction使っちゃうんですよ。
何でしょうね。

66 :
>>64
おっさん、その話もう終わってるぞ

67 :
>>65
個人用ならどうでもいいよ
オレが関わる(他人も使う)なら、糞ボケ春日と言わせてもらう

68 :
>>62
その根拠www

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

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

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

バカで理解出来ないようだからもう−度言う。
今言ってるのはお前が自己矛盾してるかどうかだ。
正式な手順があるだろうという俺の主張の話は何ーつしていない。
前にも書いたが一緒にして逃げを打たれても困るんでな。

69 :
>>65
意味はあるからしっかり使い分けなよ

70 :
>>68
だから俺の主張がMSに確認してないから根拠がないと言うならお前も根拠を出せよっていうだけの話
そもそも俺がMSに確認してないという根拠すら出せないだろ?w

71 :
>>70
バカ?
1+1=5と言われて信じる奴が何処にいる?
だから根拠を出せと言っている。
根拠を出せなければ信頼に値しない。

俺がお前の根拠を示す必要は全く無い。

72 :
>>70
いや、お前が確認してるなら根拠を出せば良い。
出さなければ信頼に値しない。

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

これが根拠だから俺がMSに何かを確認しても、それは根拠には成らん。

73 :
>>70
いや、お前が確認してるなら根拠を出せば良い。
出さなければ信頼に値しない。
それだけのことだから俺にはMSに何かを確認する意味がない。

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

これが根拠だから俺がMSに何かを確認しても、それは根拠には成らん。

74 :
on errorで出来てるし、もしMSにきいたとして
来る回答のパターンは
on error
on error以外
出来ない
くらい?出来ないはないと思うんで、
on errorが正式か、正式が別にあるんじゃないかな

75 :
>>74
俺もその主張をしているけど、ここでの問題はその議論とはちがう。

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

>>74の主張の正否とは関係なく「言い切った」ことは間違ってると言っている。

76 :
>>75
> 確認もせずに
だから俺が確認して無いって言う根拠を示せよw
当然できるんだよね?

77 :
>>74
> くらい?出来ないはないと思うんで、
なぜそう思う?
正式にはそんな機能はありませんとか回答する可能性はかなり高いと思うぞ
そもそもOn Errorの方法自体がかなりトリッキーだし

78 :
>>76
www
バーカwww

お前が確認しようがしまいがそれをここで提示出来てないから説得力無いと言っている。
提示出来なければ確認してても何の意味も無い。

79 :
>>77
また逃げを打つwww

80 :
>>77
トリッキーじゃないのは既に示した。

81 :
>>78
説得力の有無なんて関係ないだろ
お前が根拠を示せてないと言う「事実」があるだけ

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

あと念の為に言っとくけど、普段はこんなアホなことは言わんよ
「MSに確認」を執拗に要求するアホがいるから、人に要求するなら自分も根拠を示せというだけのこと

82 :
>>81
ほら、また自己矛盾だ。
バカだから気付いていないwww

83 :
VBAに拘る人種の何たるかが分かるレスバだね
関わらないのが一番

84 :
結局、バカがトリッキーだと思っただけのことをさも確定であるかのように騙ってただけのことだった

85 :
>>77
それがトリッキーなら前スレ848
>例えば昔仕事で扱ったWin32APIのGetPrinterでは取得するPinterInfo2構造体のサイズを0にして渡して敢えて失敗させることによって正しい構造体のサイズを取得するなんてのがある。
もトリッキーでしょ

86 :
>>81は騙り確定だな。

87 :
>>82
もうそういう具体性のかけらもないレスしかできないかな?

>>84-86
まともなプログラマーならドキュメントに明記されてることとそうでないことの区別ぐらいは付きそうなもんだけどな
まあ今更引っ込みつかないんだろうなw

88 :
そうでないからMSに確認しないとわからない
回答がドキュメント代わりになる

89 :
フォームから10個のTextboxに書かれた情報をボタン投下時にTextfileに一列タブ区切りで追記するもの。(空もあり)
それと、そのTextfile読み取って全列一列ずつExcelに転記出来るものを作り、内容を変更したりした後、再びTextfileにoutputするものを作りました。

そのTextfileの中ワードを検索し該当する行をタブ区切りで配列に格納してリストビューに転記するものを作ったんですが、たまに配列数0から7個だったり少なくて転記の際にエラーになるのはなんかありますか?

90 :
>>89
回答じゃないけど、テキストファイルに書くんじゃなくて(隠し)シートに書いてやるのはダメなの?

91 :
>>88
必要なら君がやればいいだけ
そんなこともわからないの?

92 :
>>89
取り敢えずエラーになった時のTextfileは確認したの?

93 :
>>87
www

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

俺は説得力が無くても良いとは思わないから、お前は騙り確定だw

94 :
>>91
だから必要なのは正式ではないと決めつけたお前なんだよwww

バカだなあw

95 :
>>93
説得力が無い?
> 説得力の有無なんて関係ないだろ
> お前が根拠を示せてないと言う「事実」があるだけ
って書いてあるんだが、ひょっとして違いがわかってないのか?w

96 :
>>95
バーカwww
根拠は示せてるで確定だwww

お前は「根拠は示せてる」に反論出来ないwww

97 :
>>95
お前自ら、反論出来ないと表明しちまったんだよw

98 :
>>95
根拠は示したという俺の主張が「事実」であり、それにお前は自ら説得力が無くても良いと言ってしまった。

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

従って、お前は反論出来ないが俺はいくらでも反論させて貰うw

99 :
そもそも根拠は何の為に必要なのかと言えば、主張に説得力を出すためだ。
相手に求めるのも説得力が無いから説得力を出すために根拠を提示しろということだ。

そんなこともわからないんだから全く意味不明。

100 :
>>96-99
> 根拠は示せてるで確定だwww
ほう、どこで示せてるんだ?
レス番示して引用してみな

まあ、どうせまたごまかすんだろうけどw


100〜のスレッドの続きを読む
【License】ライセンス総合【利用許諾】
Ruby 初心者スレッド Part 57&#169;2ch.net
[RPA]PC自動化技術総合スレ[効率化] Part.8
初心者の俺が初めて覚えるプログラム言語
Kotlin 5
[RPA]PC自動化技術総合スレ[効率化] Part.8
わんくま死亡か?
Pythonのお勉強 Part56
Ruby 初心者スレッド Part 63
【QBASIC互換!?】FreeBasic【GPL】 2
--------------------
【 Google 】 Chromecast  ★Part16
山本太郎が大人気な件
RaiderZ part24
嵐の二宮和也アンチスレpart115
【総合】ルフラン/ガレリアの地下迷宮と魔女ノ旅団 part50
【社会】学校の売店で偽札を使いパンを買った男子中学生を通貨偽造・同行使の疑いで書類送検。福岡県大野城市
サナトリウム福本一穂(o・ω・o)【祖父婆】
【最高裁】「菅直人が余計なことをして福島原発を爆発させた」 最終確定 1000年教科書に載るなこれ
【日本経済崩壊】店名公表のパチンコ店「政府の支援策からも外され、このまま休業では倒産し従業員や取引先への責任が取れない」
【LGA1151】Intel CoffeeLake Part104【14nm+】
Lenovo ThinkPad Edge E585 E595 Part47
関西のマーチング
日本の古代史 Part22
【移民】中米移民数百人が米国境近くの橋に集結 緊張高まる メキシコ北部ティフアナ[11/23]
[沈没] トヨタデジタルクルーズ Part3
【蹴りながら】CRデビルマン〜覚醒めし悪魔人間〜 ギガ押し6回目【デビルパンチ】
【chula】Freek 総合 【ネコプラなどなど】Part5
///京急スレッド 363 ///
■■■ITベンチャー及びVCの内部Kスレ■■■
映像研には手を出すな!20
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼