Excel VBA 質問スレ Part73

レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん (ワッチョイ 4668-xJJl)
垢版 |
2021/09/13(月) 07:29:59.47ID:GNx0xRRz0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ

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

※前スレ
Excel VBA 質問スレ Part70
https://mevius.5ch.net/test/read.cgi/tech/1616072923/
Excel VBA 質問スレ Part71
https://mevius.5ch.net/test/read.cgi/tech/1621914481/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/12/18(土) 21:47:56.30ID:ruUAvqsCd
神奈川県秦野市の東海大学前のグルメシティは、元は忠実屋というスーパーだった
ダイエーに買収された後グルメシティに変わった
ステッカーの下には今でも忠実屋のロゴマークが残ってる
店の床に小さい段差があるのは増築した痕跡
2021/12/19(日) 00:46:13.19ID:1w97E/wVM
ほんとおまいら、昔話が大好物だな
2021/12/19(日) 01:41:02.09ID:SLVervUs0
ジジイしかいないスレ
VBAなんていまだにやってるのは、ジジイくらいしかいないか
2021/12/19(日) 01:45:35.49ID:F1jZtUeQ0
二十歳こえたらみんなジジイだよ
956デフォルトの名無しさん (アウアウキー Safb-fxsa)
垢版 |
2021/12/19(日) 02:09:49.49ID:WKKxXwhHa
左様でござるか
2021/12/19(日) 05:36:03.45ID:9cYlynLW0
ダイクマって
あの「ダイナミックダイクマ〜!!」の
ダイクマ?
2021/12/19(日) 07:00:08.37ID:LtRjW0Zk0
A1に月、B1に最初の日、B2に最後の日を入力したら
C列に最初の日から最後の日まで書き出され
D列には月/日が書き出されるようにしたいのですが

例えば
A     B     C      D
12    19   19    12/19
      22   20    12/20
           21    12/21
           22    12/22


上記のように各セルがチェンジイベントで動作してくれればと

それと文字などがB2に入力された場合は文字をC2、D2に反映したいです


A     B     C      D
12    19   19    12/19
       h  h h

ここで色々お教えいただきそれらの構文を自分なりに組み合わせてみたのですが
初心者の私にはレベルが高すぎるようで・・・

今までご親切にお教えいただいた構文を生かしてなく申し訳ありません。
2021/12/19(日) 07:01:14.70ID:LtRjW0Zk0
>>958
> A1に月、B1に最初の日、B2に最後の日を入力したら
> C列に最初の日から最後の日まで書き出され
> D列には月/日が書き出されるようにしたいのですが
>
> 例えば
> A     B     C      D
> 12    19   19    12/19
>       22   20    12/20
>            21    12/21
>            22    12/22
>
>
> 上記のように各セルがチェンジイベントで動作してくれればと
>
> それと文字などがB2に入力された場合は文字をC2、D2に反映したいです
>
>
> A     B     C      D
> 12    19   19    12/19
>        h  h h
>
> ここで色々お教えいただきそれらの構文を自分なりに組み合わせてみたのですが
> 初心者の私にはレベルが高すぎるようで・・・
>
> 今までご親切にお教えいただいた構文を生かしてなく申し訳ありません。
2021/12/19(日) 07:03:44.45ID:LtRjW0Zk0
間違えがありましたので連続投稿になってしまいましたが
ご教授ください
2021/12/19(日) 07:04:33.84ID:LtRjW0Zk0
>>959
> >>958
> > A1に月、B1に最初の日、B2に最後の日を入力したら
> > C列に最初の日から最後の日まで書き出され
> > D列には月/日が書き出されるようにしたいのですが
> >
> > 例えば
> > A     B     C      D
> > 12    19   19    12/19
> >       22   20    12/20
> >            21    12/21
> >            22    12/22
> >
> >
> > 上記のように各セルがチェンジイベントで動作してくれればと
> >
> > それと文字などがB2に入力された場合は文字をC2、D2に反映したいです
> >
> >
> > A     B     C      D
> > 12    19   19    12/19
> >        h      h       h
> >
> > ここで色々お教えいただきそれらの構文を自分なりに組み合わせてみたのですが
> > 初心者の私にはレベルが高すぎるようで・・・
> >
> > 今までご親切にお教えいただいた構文を生かしてなく申し訳ありません。
2021/12/19(日) 07:05:30.07ID:LtRjW0Zk0
hの位置がずれていました
朝から連続投稿すいません!
2021/12/19(日) 07:40:00.27ID:F1jZtUeQ0
必要な仕様が足りない
・B2よりB1が大きい場合は動作しない?それとも翌月のその日までを記載?
・B1,B2に入力された数値が日付として有り得ない場合はどうする?動作しないだけでよいのか?
・年の判定はどうする?現在の年を使用してよいのか?
2021/12/19(日) 08:34:48.49ID:J5v8c1sd0
>>958前スレで見た

https://mevius.5ch.net/test/read.cgi/tech/1626565335/782-
2021/12/19(日) 08:38:14.07ID:J5v8c1sd0
最初は782で結局やりたい事は
https://mevius.5ch.net/test/read.cgi/tech/1626565335/829
これだったと
2021/12/19(日) 15:48:07.81ID:LtRjW0Zk0
>>963
> 必要な仕様が足りない
失礼しました
> ・B2よりB1が大きい場合は動作しない?それとも翌月のその日までを記載?
B1の方が大きければ空白になってくれればいいのですが
エラー表示がセルに表示されてもエラーはエクセルの設定で空白にできるので大丈夫かと思っています

月をまたぐことはありません

> ・B1,B2に入力された数値が日付として有り得ない場合はどうする?動作しないだけでよいのか?
122/111や12/35と表示されてもかまいません
文字が入力されてもそのまま表示したいです

> ・年の判定はどうする?現在の年を使用してよいのか?
年は考慮しなくても大丈夫です
長くて一週間の予定だけでしか使用しません

説明下手ですいません (汗 
2021/12/19(日) 17:22:51.01ID:6V5J9+AZ0
Dim a(10,20)
a(1,2)=3

上で2行目の1や2の数字のことを何て言うのでしょうか
初歩の質問で申し訳ありません。
2021/12/19(日) 17:50:26.31ID:XeEcFWJL0
ひきすう?
2021/12/19(日) 17:53:41.03ID:KHFMKFNKM
>>967
添え字かな
2021/12/19(日) 18:27:21.36ID:pq+sPc2G0
あるソフトウェアが出力する
ログファイル(テキストファイルで行数は不定)をスペース区切りで文字列として読み込むコードを書いているのですが
ログファイルの先頭行のスペースの数が一定ではなく
単純に読み込むと先頭の数値が
A列目に入ったりB列目、C列目に入ったりして困っております

連続するスペースを一つのデリミタとして扱うか
(そうすればA列だけが空白になる)
もしくは先頭に連続して入っているスペースを無視する方法を探しているのですが見当たりません

皆様のお力添えをお願い致します
971デフォルトの名無しさん (ワッチョイ dabd-6dU9)
垢版 |
2021/12/19(日) 18:43:59.87ID:pq+sPc2G0
>>970
自己レス

> 連続するスペースを一つのデリミタとして扱うか
> (そうすればA列だけが空白になる)

この方法は使えない事に気づきました
ログファイルの先頭(左端)
に数値が入っている場合もあるので
スペースが一つでも入っている場合では、入力される列が
A列とB列に変わってしまいます

先頭(左端)に連続して入っているスペースを無視する方法しか
無いかもしれません
2021/12/19(日) 18:56:32.68ID:RC6G9Zkh0
何をしたいのかよくわからんけどちゃちゃっとやるなら正規表現使え
https://codezine.jp/article/detail/1655
973デフォルトの名無しさん (ワッチョイ be8e-qezp)
垢版 |
2021/12/19(日) 19:02:03.97ID:oG6IuvVy0
ルビー基地外だぞ
2021/12/19(日) 19:04:40.91ID:9cYlynLW0
>>971
LTrimでググれ
975デフォルトの名無しさん (ワッチョイ dabd-6dU9)
垢版 |
2021/12/19(日) 19:08:52.05ID:pq+sPc2G0
連続レス申し訳ありません

必要な処理はもうちょっと複雑でした
GetOpenFilenameで開いたファイルを
Workbooks.Open(FileN,Format:=3,ReadOnly:=True)
で処理しているのですが
ログファイルの行中に連続して入っているスペースも一つずつカウントして空白列を作ってしまいます

必要な処理は
1) 連続したスペースを一つのデリミタとして区切り
2) 行先頭にスペースが入っていた場合は最初の文字が始まるまで削除もしくは無視する

といったものになると思います
何卒ご助力お願い致します
2021/12/19(日) 19:46:59.93ID:sZ+QwmZV0
>>975
それって固定長じゃないの?
全銀データみたいな奴
固定長なら、文字数数えて、データ区切り使ったほうが早いと思う
977デフォルトの名無しさん (ワッチョイ dabd-6dU9)
垢版 |
2021/12/19(日) 20:17:13.17ID:pq+sPc2G0
皆様ご回答ありがとうございます

>>972
ありがとうございます
正規表現は私にはちょっと敷居が高いようです

>>974
ありがとうございます
LTRIMで一度先頭スペースを抜いた中間ファイルを作るというのは
一つの手順としてあるかと思います

>>976
ありがとうございます
途中でエラーメッセージ行とかが
入るので全ての行が固定長
と言うわけではないのですが
データを処理したい行は固定長に近いです
問題は処理したい行の先頭に0〜3個のスペースが入ることです
2021/12/19(日) 20:33:08.86ID:Ax4UFlXX0
>>975
1行ずつ読み込んで事前処理するのがいいんじゃね
------------------------
行=1
列=1
Open filename for Input as #1
Do until EOF(1)
Line Input #1, str '一行ずつ読み込み
str=Trim(str) '両端の空白除去
arr=Split(str," ") '空白で分割し配列に格納
for i=1 to arr.Ubound(arr) 'セルに書き込み
Cells(行,列+i).Value=arr[i]
next i
行=行+1
Loop
close #1
-----------------------------
2021/12/19(日) 20:40:17.69ID:6V5J9+AZ0
>>968-969
ご回答ありがとうございました
2021/12/19(日) 20:44:00.34ID:F1jZtUeQ0
>>966
Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False
If Not Intersect(Target, Union(Me.Range("A1"), Me.Range("B1"), Me.Range("B2"))) Is Nothing Then

If Me.Range("A1").Value <> "" And Me.Range("B1").Value <> "" And Me.Range("B2").Value <> "" Then

Me.Columns(3).ClearContents
If Me.Columns(3).NumberFormatLocal <> "@" Then Me.Columns(3).NumberFormatLocal = "@"

If IsNumeric(Me.Range("A1").Value) And IsNumeric(Me.Range("B1").Value) And IsNumeric(Me.Range("B2").Value) And Me.Range("B1").Value <= Me.Range("B2").Value Then

Dim OutAry() As String
ReDim OutAry(Me.Range("B1").Value To Me.Range("B2").Value)

Dim RowCnt As Long
For RowCnt = LBound(OutAry) To UBound(OutAry)
OutAry(RowCnt) = Me.Range("A1") & "/" & RowCnt
Next RowCnt

Range(Me.Cells(1, 3), Me.Cells(UBound(OutAry) - LBound(OutAry) + 1, 3)).Value = WorksheetFunction.Transpose(OutAry)

End If

End If

End If
Application.EnableEvents = True

End Sub
981デフォルトの名無しさん (ワッチョイ dabd-6dU9)
垢版 |
2021/12/19(日) 20:57:27.62ID:pq+sPc2G0
>>978
ありがとうございます

私も一行ずつ処理するべきなのかと思い始めました

その際
----------------
arr=Split(str," ") '空白で分割し配列に格納
----------------
だとデータ行中に空白が連続している場合
例えば
a b c d
のような場合でも
A列→a
B列→b
C列→c
D列→d
のように入力可能でしょうか?
2021/12/19(日) 21:13:00.94ID:LtRjW0Zk0
>>980
わかりづらい説明にご親切にありがとうございます
感謝!
今から試したいと思います!
2021/12/19(日) 21:22:20.20ID:o7hmg8oNM
>>981
そんなもんマクロの記録で連続する区切り文字は1文字として扱うオプション使えばいいでしょ
2021/12/19(日) 21:39:11.49ID:EkrjUmtA0
Ruby なら、abc の前後・間に、複数の連続した空白類があっても、分割できる

Ruby で,文字列を空白文字類や「.」などを区切りとして切り出す
https://www.kkaneko.jp/pro/ruby/tokenize.html

str = " a b c "

p str.split( nil )
p str.strip.split( /\s+/ )
p str.strip.split( /[ |\t|\r|\n|\f]+/ )

これらはすべて、["a", "b", "c"] となる

空白類・\s は、[ |\t|\r|\n|\f] の5種類の空白を含む。
strip は、文字列の先頭・末尾から、連続した空白類を除去する
2021/12/19(日) 21:42:45.37ID:tlLDAcl00
今時、rubyとか使ってんじゃねーよ
2021/12/19(日) 21:51:18.70ID:LtRjW0Zk0
>>980
すみません
今試してみました
C列には期間の日が表示され
D列には機関の月日が表示され

仮にB2に文字が入力されたら
C2とD2には文字が表示され
C1とD1には日と月日が表示したいです

私にはなにをどうしたらいいのかまったくわかりませんでした
技術的にむずかしいでしょうか?
ググってみましたが出来そうにないです
2021/12/19(日) 22:12:20.36ID:Ax4UFlXX0
>>981
その場合はtrim, splitの替わりに正規表現使うのがいいかと
dim reg as new regexp
reg.global=true
reg.pattern="(\S+)" '空白以外
set mc=reg.execute(str)
for i to mc.count-1
set m=mc.item(i)
cells(1,i).value=m.value
next i
2021/12/19(日) 23:20:35.00ID:2A/aI1dD0
>>981
これで代入できる
Range("A1:D1") = Split(str, " ")
989デフォルトの名無しさん (ワッチョイ be8e-qezp)
垢版 |
2021/12/19(日) 23:23:16.74ID:oG6IuvVy0
相変わらずRuby基地外に引っ掛かる馬鹿ども
990デフォルトの名無しさん (ワッチョイ dabd-6dU9)
垢版 |
2021/12/19(日) 23:33:22.46ID:pq+sPc2G0
>>983

ありがとうございます
やってみます

>>984
ありがとうございます
さすがにExcelで処理しているファイルをVBA以外で制御するのは無理です

>>987
ありがとうございます
正規表現は敷居が高い(奥深すぎ)ので敬遠していましたが
そのコードを手がかりに解析してみます

a b c d
a b c d
a b c d

のような場合でも
そのコードは使えますでしょうか?
991デフォルトの名無しさん (ワッチョイ dabd-6dU9)
垢版 |
2021/12/19(日) 23:36:15.57ID:pq+sPc2G0
>>988
ありがとうございます

この場合も処理可能でしょうか?
a b c d
a b c d
a b c d
2021/12/19(日) 23:41:22.83ID:kIFouMiR0
ファイルを開いてVBAで処理する系は
VBAのエディタがアップデート放棄しててユニコードに対応しないらしいのでやめた方がいいかも

Regexpでユニコード文字列を置き換える処理をこさえたりすればなんとかなるかもしれないが
993デフォルトの名無しさん (ワッチョイ dabd-6dU9)
垢版 |
2021/12/19(日) 23:51:29.72ID:pq+sPc2G0
>>992
ご注意ありがとうございます
私の場合であれば処理するlogは
ASCIIのみなので問題ないかと思います
2021/12/20(月) 01:25:47.26ID:x5N85HfoM
replace(hoge," "," ")
2021/12/20(月) 01:39:15.08ID:jnlr9GaR0
>>986
ごめん
ちょっと何を言っているのか分からないからもう少し整理してから言葉にして
文字列や日付として破綻しているものでも可なのにその期間を出力せよっていうのはどういう意味?
仕様がちぐはぐで何をしたいのかが分からない

出力列を増やすのはのは対して手間は変わらないから自分でアレンジして
分からないならもっと基礎の部分を勉強するか諦めて関数式書いた方が早いよ
2021/12/20(月) 01:41:34.12ID:jnlr9GaR0
次スレ
Excel VBA 質問スレ Part74
https://mevius.5ch.net/test/read.cgi/tech/1639932059/
2021/12/20(月) 07:39:37.83ID:sc4Jjnxw0
>>996
2021/12/20(月) 10:40:58.57ID:2126b9QK0
>>995
前スレ見たらわかるけどそいつ後出し後出しで
しかも前スレで得た知識も抜きで再質問してる

https://mevius.5ch.net/test/read.cgi/tech/1626565335/782,829

>>996
乙!
2021/12/20(月) 21:13:06.47ID:1VhmJElm0
>>995
すいません
関数を使ってみたいとおもいます
これか自分で勉強しレベルを上げていきたいと思います
あなたのおっしゃるとおりだと思います
今までお教えいただいたことを参考に
勉強していきたいと思います
ここの先生たちには本当に感謝しています
1000デフォルトの名無しさん (スッップ Sd8a-qezp)
垢版 |
2021/12/20(月) 21:21:42.29ID:XrZMAyhid
いつものあいつ
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 98日 13時間 51分 43秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。