ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part65
https://mevius.5ch.net/test/read.cgi/tech/1584430040/
※デフォルト設定
探検
Excel VBA 質問スレ Part66
■ このスレッドは過去ログ倉庫に格納されています
11000
2020/05/10(日) 13:43:45.00ID:Nkoph0aj515デフォルトの名無しさん
2020/06/04(木) 15:52:15.99ID:MXeQjX7b おれ、昔は i , j ばかり使ってたけど、最近は回す配列の名前を反映した変数を使ってる
Forブロックが単独で存在するならいいんだけど、if や 他のForブロックと組み合わさって
階層構造になってると、だいぶあとになってメンテするときに理解が遅れる
Forブロックが単独で存在するならいいんだけど、if や 他のForブロックと組み合わさって
階層構造になってると、だいぶあとになってメンテするときに理解が遅れる
516デフォルトの名無しさん
2020/06/04(木) 16:42:33.52ID:9nIeytil いいね
他にもループ内の処理をそのまま関数にしてしまう方法もある
コメントを書かなくても処理の意味を関数名として記述できるし、再利用性も高まる。
おまけとしてVBAの構文にはないcontinue(処理を中断して次のループへ入る)が行える。
もしくは再帰関数を定義してfor文自体を無くすという凝った方法もある。
他にもループ内の処理をそのまま関数にしてしまう方法もある
コメントを書かなくても処理の意味を関数名として記述できるし、再利用性も高まる。
おまけとしてVBAの構文にはないcontinue(処理を中断して次のループへ入る)が行える。
もしくは再帰関数を定義してfor文自体を無くすという凝った方法もある。
517デフォルトの名無しさん
2020/06/04(木) 18:37:05.61ID:08KHEEC1 データモデルに入れたデータからSQLを使ってシートに出力する方法を教えてください。
ネットになかなか情報がなくて
ListObjects.Add(SourceType:=4, Source:=ActiveWorkbook.Connections("クエリ - パワークエリ名"), Destination:=Range("$A$1")).TableObject
から
.WorkbookConnection.OLEDBConnection.CommandText = "テーブル名" にするとテーブルを出力
.CommandText = Array("EVALUATE CALCULATETABLE('テーブル名' , 'テーブル名'[項目名] =""検索語"" ) ")
.CommandType = xlCmdDAX
のようにするとDAX式で加工したテーブルを出力できるようになりましたが、SQLを使用する方法がわかりません。
ネットになかなか情報がなくて
ListObjects.Add(SourceType:=4, Source:=ActiveWorkbook.Connections("クエリ - パワークエリ名"), Destination:=Range("$A$1")).TableObject
から
.WorkbookConnection.OLEDBConnection.CommandText = "テーブル名" にするとテーブルを出力
.CommandText = Array("EVALUATE CALCULATETABLE('テーブル名' , 'テーブル名'[項目名] =""検索語"" ) ")
.CommandType = xlCmdDAX
のようにするとDAX式で加工したテーブルを出力できるようになりましたが、SQLを使用する方法がわかりません。
518デフォルトの名無しさん
2020/06/04(木) 19:00:14.86ID:OTCVkkK8 馬鹿ではなさそうだが、しつこい教えてクレクレに呆れる
ググれよ
ググれよ
519デフォルトの名無しさん
2020/06/04(木) 19:01:01.58ID:gQJ1UXfv >ネットになかなか情報がなくて
逆にそれを探し当てる方が難しいと思うんだが・・・。
とりあえず、マクロを記録しながらMSクエリを操作すれば答えが出ると思う。
逆にそれを探し当てる方が難しいと思うんだが・・・。
とりあえず、マクロを記録しながらMSクエリを操作すれば答えが出ると思う。
520デフォルトの名無しさん
2020/06/04(木) 19:03:34.01ID:gQJ1UXfv >パワークエリ名
あ、2016以上か。
パワークエリがあるせいで、MSクエリにたどり着かなかったということか。
あ、2016以上か。
パワークエリがあるせいで、MSクエリにたどり着かなかったということか。
521デフォルトの名無しさん
2020/06/04(木) 19:43:02.85ID:ZOeL7/nf >>516
同じ処理を関数にするのはよくあることだけど、同じ処理を括るよりは意味合いで括る方が上策だと思う。
適切に関数に分けていれば、そもそもそんなに入れ子にならんだろう。
再起なんて、それこそ意味合いで自然に出来上がるもんで、無理して作るもんじゃねえと思うんだが。
同じ処理を関数にするのはよくあることだけど、同じ処理を括るよりは意味合いで括る方が上策だと思う。
適切に関数に分けていれば、そもそもそんなに入れ子にならんだろう。
再起なんて、それこそ意味合いで自然に出来上がるもんで、無理して作るもんじゃねえと思うんだが。
522デフォルトの名無しさん
2020/06/04(木) 22:08:56.53ID:uauxSmqO Sub セル構成を2行3列に()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
j = 2 '←ここで何列おき
Set rng = ActiveSheet.UsedRange
For i = rng.Columns.Count To 8 Step -1
rng.Cells(10,i).Resize(10,j).EntireColumn.Insert Next Set rng = Nothing
Range("G10", "I510").Merge Across:=True
Range("J10", "L510").Merge Across:=True
Range("M10", "O510").MergeAcross:=True
Range("P10", "R510").Merge Across:=True
Range("S10", "U510").Merge Across:=True
Range("V10", "X510").Merge Across:=True
Range("Y10", "AA510").MergeAcross:=True
Range("AB10", "AD510").Merge Across:=True
Range("AE10", "AG510").Merge Across:=True
Range("AH10", "AJ510").Merge Across:=True
Application.DisplayAlerts = False
Application.ScreenUpdating = False
j = 2 '←ここで何列おき
Set rng = ActiveSheet.UsedRange
For i = rng.Columns.Count To 8 Step -1
rng.Cells(10,i).Resize(10,j).EntireColumn.Insert Next Set rng = Nothing
Range("G10", "I510").Merge Across:=True
Range("J10", "L510").Merge Across:=True
Range("M10", "O510").MergeAcross:=True
Range("P10", "R510").Merge Across:=True
Range("S10", "U510").Merge Across:=True
Range("V10", "X510").Merge Across:=True
Range("Y10", "AA510").MergeAcross:=True
Range("AB10", "AD510").Merge Across:=True
Range("AE10", "AG510").Merge Across:=True
Range("AH10", "AJ510").Merge Across:=True
523デフォルトの名無しさん
2020/06/04(木) 22:10:21.75ID:uauxSmqO Range("AK10", "AM510").MergeAcross:=True
Range("AN10", "AP510").MergeAcross:=True
Range("AQ10", "AS510").Merge Across:=True
Range("AT10", "AV510").Merge Across:=True
Range("AW10", "AY510").MergeAcross:=True
Range("AZ10", "BB510").Merge Across:=True
Range("BC10", "BE510").Merge Across:=True
Range("BF10", "BH510").Merge Across:=True
Range("BI10", "BK510").Merge Across:=True
Range("BL10", "BN510").Merge Across:=True
Range("BO10", "BQ510").MergeAcross:=True
Range("BR10", "BT510").Merge Across:=True
Range("BU10", "BW510").MergeAcross:=True
Range("BX10", "BZ510").Merge Across:=True
Range("CA10", "CC510").MergeAcross:=True
Dim po As Long, ro As Long
For gg = Cells(Rows.Count, "E").End(xlUp).Row To 11 Step -1
Rows(po + 1).Insert
For ro = 5 To 79
Cells(po, ro).Resize(2).Merge
Next ro Next po
HorizontalAlignment = xlCenter
VerticalAlignment = xlCenter
Application.DisplayAlerts = True
End Sub
VBAの勉強すらしてない俺が10個くらいのサイトからパクってつなげて一応希望通り動いた
setとかレンジ型とか意味わからんわ…
Range("AN10", "AP510").MergeAcross:=True
Range("AQ10", "AS510").Merge Across:=True
Range("AT10", "AV510").Merge Across:=True
Range("AW10", "AY510").MergeAcross:=True
Range("AZ10", "BB510").Merge Across:=True
Range("BC10", "BE510").Merge Across:=True
Range("BF10", "BH510").Merge Across:=True
Range("BI10", "BK510").Merge Across:=True
Range("BL10", "BN510").Merge Across:=True
Range("BO10", "BQ510").MergeAcross:=True
Range("BR10", "BT510").Merge Across:=True
Range("BU10", "BW510").MergeAcross:=True
Range("BX10", "BZ510").Merge Across:=True
Range("CA10", "CC510").MergeAcross:=True
Dim po As Long, ro As Long
For gg = Cells(Rows.Count, "E").End(xlUp).Row To 11 Step -1
Rows(po + 1).Insert
For ro = 5 To 79
Cells(po, ro).Resize(2).Merge
Next ro Next po
HorizontalAlignment = xlCenter
VerticalAlignment = xlCenter
Application.DisplayAlerts = True
End Sub
VBAの勉強すらしてない俺が10個くらいのサイトからパクってつなげて一応希望通り動いた
setとかレンジ型とか意味わからんわ…
524デフォルトの名無しさん
2020/06/04(木) 22:13:08.78ID:uauxSmqO For po = Cells(Rows.Count, "E").End(xlUp).Row To 11 Step -1
ここはこうだったな俺の変数癖だわ
なんかもう難しすぎて勉強するよりネットで検索してパクって繋げたほうが楽な気がする
39歳からVBA覚えるって脳みそがついていかんわ
ここはこうだったな俺の変数癖だわ
なんかもう難しすぎて勉強するよりネットで検索してパクって繋げたほうが楽な気がする
39歳からVBA覚えるって脳みそがついていかんわ
525デフォルトの名無しさん
2020/06/04(木) 22:15:04.15ID:k3k6AIFZ そんな報告いらん
自分の日記スレでも立てればいい
自分の日記スレでも立てればいい
526デフォルトの名無しさん
2020/06/04(木) 22:15:05.91ID:OTCVkkK8 隙あらば馬鹿が日記を書き込む
527デフォルトの名無しさん
2020/06/04(木) 22:19:18.86ID:uauxSmqO 隙あらば馬鹿って言いにきてんの?
定期的に馬鹿としか書いてないけど
定期的に馬鹿としか書いてないけど
528デフォルトの名無しさん
2020/06/04(木) 22:22:05.20ID:i/KeU7gc そうして精神を保ってるとでも思っておこう
529デフォルトの名無しさん
2020/06/04(木) 22:43:14.91ID:OTCVkkK8 >>527
馬鹿は黙っていろよ
馬鹿は黙っていろよ
530デフォルトの名無しさん
2020/06/04(木) 22:57:09.20ID:nxAuSZLn セルにコメント挿入して中の文字色を一部だけ変えれる事って出来ますか?
strTxt=111111(vbtab)223(vbtab)8975
例えばこんな文字列の223だけ赤色、それ以外は黒色。
strTxt=111111(vbtab)223(vbtab)8975
例えばこんな文字列の223だけ赤色、それ以外は黒色。
531デフォルトの名無しさん
2020/06/04(木) 22:59:22.67ID:c/xPJE8L >>527
お前の書き込みは馬鹿の自己満足以外の何物でもないぞ
お前の書き込みは馬鹿の自己満足以外の何物でもないぞ
532デフォルトの名無しさん
2020/06/05(金) 00:25:19.46ID:fHeju+Td >>530
Cells(1, 1).AddComment "あいうえおかきくけこさしすせそ"
Dim c As Excel.Characters
Set c = Cells(1, 1).Comment.Shape.TextFrame.Characters(2, 10)
c.Font.ColorIndex = 3
例えばこれだと、コメントを追加して2文字目から10文字のフォント色を色番号3=赤に変える
という処理になるよ。
他にもフォント,太字斜体,サイズとか、fontクラスのものなら何でも変えれるね。
処理的には変更開始と文字数をどう特定するかだけど頑張ってね
Cells(1, 1).AddComment "あいうえおかきくけこさしすせそ"
Dim c As Excel.Characters
Set c = Cells(1, 1).Comment.Shape.TextFrame.Characters(2, 10)
c.Font.ColorIndex = 3
例えばこれだと、コメントを追加して2文字目から10文字のフォント色を色番号3=赤に変える
という処理になるよ。
他にもフォント,太字斜体,サイズとか、fontクラスのものなら何でも変えれるね。
処理的には変更開始と文字数をどう特定するかだけど頑張ってね
533デフォルトの名無しさん
2020/06/05(金) 00:27:45.38ID:2CjtUfu9 >>530
comment.shape.textFrame.characters
comment.shape.textFrame.characters
534デフォルトの名無しさん
2020/06/05(金) 00:50:59.98ID:8UrD2y10 39歳で限界とか。元々能力が低いとしか。
535デフォルトの名無しさん
2020/06/05(金) 05:51:53.87ID:td6kQI8l >>534
なんだと、このハゲ!
なんだと、このハゲ!
536デフォルトの名無しさん
2020/06/05(金) 06:27:32.36ID:YMz2fC5g >>522
一応解説すると、、、
値にはいろんな型があるけど、
文字リテラル(例:"Hello")
数値リテラル(例:123)
日付リテラル(例:#2020/6/5#)
真偽値 (例:True)
上記で構成される配列(例:Array("月","火","水") )
これらは(またはこれらの値を返す式)はイコールだけで変数にぶっ込めるけど、
これら以外はすべてオブジェクトと見なされるので、
Set 左辺=右辺
の記述で変数に代入する必要がある。
例えば、ブック、シート、といったものはすべてオブジェクト扱い。
もちろんセル範囲(Range)もオブジェクトなので、Setが必要。
範囲オブジェクトを返すには Range("アドレス記述")で表せるけどこれだと
示してくれた例のように全部書き出す必要がありコードが冗長になる。
そんなときはCells(行,列)の記述で範囲オブジェクトを返すとLoop処理で
簡潔に記述できる。
Cells(行,列)だと1セルしか表せないからRangeと組み合わせて
Range(Cells(行,列),Cells(行,列))
みたいに記述すれば指定範囲を表現できる。
または、
Cells(行,列).Resize(500,3)
みたいに記述すれば範囲サイズを拡張できる。
あとはForで行、列の変数をうまうコントロールすればOK.
理解の助けになるといいけど、、
一応解説すると、、、
値にはいろんな型があるけど、
文字リテラル(例:"Hello")
数値リテラル(例:123)
日付リテラル(例:#2020/6/5#)
真偽値 (例:True)
上記で構成される配列(例:Array("月","火","水") )
これらは(またはこれらの値を返す式)はイコールだけで変数にぶっ込めるけど、
これら以外はすべてオブジェクトと見なされるので、
Set 左辺=右辺
の記述で変数に代入する必要がある。
例えば、ブック、シート、といったものはすべてオブジェクト扱い。
もちろんセル範囲(Range)もオブジェクトなので、Setが必要。
範囲オブジェクトを返すには Range("アドレス記述")で表せるけどこれだと
示してくれた例のように全部書き出す必要がありコードが冗長になる。
そんなときはCells(行,列)の記述で範囲オブジェクトを返すとLoop処理で
簡潔に記述できる。
Cells(行,列)だと1セルしか表せないからRangeと組み合わせて
Range(Cells(行,列),Cells(行,列))
みたいに記述すれば指定範囲を表現できる。
または、
Cells(行,列).Resize(500,3)
みたいに記述すれば範囲サイズを拡張できる。
あとはForで行、列の変数をうまうコントロールすればOK.
理解の助けになるといいけど、、
537デフォルトの名無しさん
2020/06/05(金) 06:58:05.99ID:Lq81HhXC >>535
年齢を言い訳に使ってる時点で人として残念な人でしょ
年齢を言い訳に使ってる時点で人として残念な人でしょ
538デフォルトの名無しさん
2020/06/05(金) 07:40:51.89ID:oZqvF/U1 まったく最近の若者は……
539デフォルトの名無しさん
2020/06/05(金) 08:25:59.68ID:KlfmBaSN 勉強の話が出てるけど上級者だって全てを覚えているわけじゃない。
>>532のCharactersの話だって、取りあえずこの後に"("を打って見れば説明が出てくるんで、そこから推理してる。
そして推理したら実際に別でテストする。
上手く動いたら、うっすら何となく覚える。
うっすら覚えてる場合は次回も"("打ってからの推理から始まる。
それで問題は起こらないし、何回か繰り返せば完全に覚える。
丸暗記は大変だし結果的に覚えない。
>>532のCharactersの話だって、取りあえずこの後に"("を打って見れば説明が出てくるんで、そこから推理してる。
そして推理したら実際に別でテストする。
上手く動いたら、うっすら何となく覚える。
うっすら覚えてる場合は次回も"("打ってからの推理から始まる。
それで問題は起こらないし、何回か繰り返せば完全に覚える。
丸暗記は大変だし結果的に覚えない。
540デフォルトの名無しさん
2020/06/05(金) 10:36:23.39ID:fHeju+Td いや何となく覚えてたけど
541デフォルトの名無しさん
2020/06/05(金) 12:39:12.93ID:tnz6CDPA そのなんとなくでいんじゃねって話でなくて?
542デフォルトの名無しさん
2020/06/05(金) 18:45:39.76ID:IG+dLk9+ >>524
そろそろ引退したらどうですか?
そろそろ引退したらどうですか?
543デフォルトの名無しさん
2020/06/05(金) 19:01:37.97ID:7QZKDprx >>521
入れ子時の対策として言っただけで、普通は入れ子になりづらいとか急に言われても困る
あと意識せずに自然に再帰になるとかマ?
関数型以外じゃ意識しないと普通できないだろw
やるとしても配列の畳み込みメソッドぐらいなんでは?
入れ子時の対策として言っただけで、普通は入れ子になりづらいとか急に言われても困る
あと意識せずに自然に再帰になるとかマ?
関数型以外じゃ意識しないと普通できないだろw
やるとしても配列の畳み込みメソッドぐらいなんでは?
544デフォルトの名無しさん
2020/06/05(金) 20:18:14.26ID:KlfmBaSN >>543
例えば初めて再起を使った時に再起なるものなんか知らなかった。
単純に自分を呼び出せば良くね?と思って書いたら再起だった。
再起なるものを知った後でも、基本的に自分を呼び出せば良いじゃんと思う場面が殆ど。
例えば、パスを与えたらそのフォルダの下のファイルやフォルダ名を全部列挙するという関数を考える。
列挙してる中でフォルダ名取得したら、そのフォルダ名で自分を呼び出せば良いわけだ。
そうすればその呼び出しで更に配下の列挙が得られるんだから。
もっとも、このファイル列挙では最初はDir関数グローバルな動きをすると知らなかったので上手く行かなかったけど。
例えば初めて再起を使った時に再起なるものなんか知らなかった。
単純に自分を呼び出せば良くね?と思って書いたら再起だった。
再起なるものを知った後でも、基本的に自分を呼び出せば良いじゃんと思う場面が殆ど。
例えば、パスを与えたらそのフォルダの下のファイルやフォルダ名を全部列挙するという関数を考える。
列挙してる中でフォルダ名取得したら、そのフォルダ名で自分を呼び出せば良いわけだ。
そうすればその呼び出しで更に配下の列挙が得られるんだから。
もっとも、このファイル列挙では最初はDir関数グローバルな動きをすると知らなかったので上手く行かなかったけど。
545デフォルトの名無しさん
2020/06/05(金) 20:57:20.30ID:H0L/fXZL 再起って何だろう?
546デフォルトの名無しさん
2020/06/05(金) 21:05:54.74ID:rCWyQTVZ >>542
職場の業務というか海外含めて複数の支部で使われてるから出てくるデータを瞬時に処理できるコードをここで3つ教わってしまったからね
もうVBA続けるしかないわ
textデータにプローシージャコピーしてクラウドに保存してあるレベルの
職場の業務というか海外含めて複数の支部で使われてるから出てくるデータを瞬時に処理できるコードをここで3つ教わってしまったからね
もうVBA続けるしかないわ
textデータにプローシージャコピーしてクラウドに保存してあるレベルの
547デフォルトの名無しさん
2020/06/05(金) 21:08:38.53ID:cCPYycaK >>545
たぶん再帰の変換ミスだろ
たぶん再帰の変換ミスだろ
548デフォルトの名無しさん
2020/06/05(金) 21:32:27.71ID:ZSs62RcL 色々調べたのですが・・・。
コピーし貼り付けのマクロで
条件付き書式だけを除いて張り付ける、というマクロを探しています。
今の状態ですと条件付き書式の情報まで上書きされて困っています。
ご教授宜しくお願い致します。
コピーし貼り付けのマクロで
条件付き書式だけを除いて張り付ける、というマクロを探しています。
今の状態ですと条件付き書式の情報まで上書きされて困っています。
ご教授宜しくお願い致します。
549デフォルトの名無しさん
2020/06/05(金) 21:43:17.50ID:H0L/fXZL >>547
変換ミスにしては何度も使ってるぞ
変換ミスにしては何度も使ってるぞ
550デフォルトの名無しさん
2020/06/05(金) 21:47:17.22ID:2CjtUfu9 >>548
まず他スレの質問締め切るなり断り入れるなりして来いよ
まず他スレの質問締め切るなり断り入れるなりして来いよ
551デフォルトの名無しさん
2020/06/05(金) 21:47:20.00ID:nvWU7/6f 貼り付けた後に
.FormatConditions.Delete
で条件付き書式だけ削除じゃダメなの?
.FormatConditions.Delete
で条件付き書式だけ削除じゃダメなの?
552548
2020/06/05(金) 22:17:11.59ID:ZSs62RcL553デフォルトの名無しさん
2020/06/05(金) 22:21:45.02ID:WwtDf+8P >>548
そもそも"コピー"する必要はあるの?
そもそも"コピー"する必要はあるの?
554デフォルトの名無しさん
2020/06/06(土) 02:50:09.78ID:2JXrsjtz pasteSpecial繰り返して必要なものだけ貼り付けるしかないんじゃない?
555デフォルトの名無しさん
2020/06/06(土) 07:05:32.16ID:boE/wbIl 何度でも蘇るのが再起だろうな
556デフォルトの名無しさん
2020/06/06(土) 08:07:18.40ID:dTKuJKfw >>436
ロマサガ3とはなかなか分かってる先輩だなw
ロマサガ3とはなかなか分かってる先輩だなw
557デフォルトの名無しさん
2020/06/06(土) 12:47:06.87ID:EOD/vRIp VBAの配列にもCount使わせて欲しい・・・・
面倒でたまらないわぁ
ちなみにSplitで空配列になったときってUBoundは必ず-1返すのかな
まぁSplitする前の文字列が空かどうかで判別すればいいんだけど
面倒でたまらないわぁ
ちなみにSplitで空配列になったときってUBoundは必ず-1返すのかな
まぁSplitする前の文字列が空かどうかで判別すればいいんだけど
558デフォルトの名無しさん
2020/06/06(土) 14:19:39.59ID:nsmtjJW2 SetTimerのコールバック関数内でSetTimerしなおすやつは、再起といっていいかも
あれ、再帰じゃないし
あれ、再帰じゃないし
559デフォルトの名無しさん
2020/06/06(土) 14:24:54.65ID:FUHWS7EH >>557
そういうのはラッパークラス定義しちゃえばいい
要素を持たない配列はuboundで-1になるけど、
配列を返す関数をそのままuboundの引数にするとメモリが解放されないらしい
一度変数に代入してから、その変数を引数にするしかない
そういうのはラッパークラス定義しちゃえばいい
要素を持たない配列はuboundで-1になるけど、
配列を返す関数をそのままuboundの引数にするとメモリが解放されないらしい
一度変数に代入してから、その変数を引数にするしかない
560548
2020/06/06(土) 19:20:06.05ID:evXurMFK >>554
有難うございます!そういうやり方もありますね。勉強になりました。
あれからIF関数と条件付き書式を組み合わせて問題克服できました。
相談に乗っていただけた方みなさん有難うございます。
お騒がせしますた。
有難うございます!そういうやり方もありますね。勉強になりました。
あれからIF関数と条件付き書式を組み合わせて問題克服できました。
相談に乗っていただけた方みなさん有難うございます。
お騒がせしますた。
561デフォルトの名無しさん
2020/06/07(日) 01:10:37.79ID:czcu/Wo5 ボタンを押してランダムに1ー100の数字をコンピュータに選ばせて、その結果をセルに表示させたいと思いマクロを組みました。
それはできたのですが、ボタンを押すごとに出る数字の履歴を残したいときはどうしたらいいでしょうか?例えば初めはA1、次はA2、次はA3…のようにしたいです。
それはできたのですが、ボタンを押すごとに出る数字の履歴を残したいときはどうしたらいいでしょうか?例えば初めはA1、次はA2、次はA3…のようにしたいです。
562デフォルトの名無しさん
2020/06/07(日) 01:27:02.35ID:MDOjbT3v また馬鹿が来た
563デフォルトの名無しさん
2020/06/07(日) 01:42:25.59ID:Dw2BAEV/ 消さなきゃいんじゃないの…
564デフォルトの名無しさん
2020/06/07(日) 01:51:41.32ID:czcu/Wo5 1回目、2回目とボタンを押すごとにA列を下方向に順に記録させたいのです。
説明が悪いかも、すみません
説明が悪いかも、すみません
565デフォルトの名無しさん
2020/06/07(日) 02:00:00.68ID:81VYwWTh 色々やり方があるが回数を持たせるのが簡単だろうな
566デフォルトの名無しさん
2020/06/07(日) 02:00:43.51ID:Dw2BAEV/ その通り表示させるセル変えればいんじゃないの…
567デフォルトの名無しさん
2020/06/07(日) 02:16:26.24ID:MDOjbT3v568デフォルトの名無しさん
2020/06/07(日) 02:44:14.80ID:81VYwWTh >>567
初心者ってこんなもんだろ
初心者ってこんなもんだろ
569デフォルトの名無しさん
2020/06/07(日) 03:03:21.76ID:zKcEsa3T 初心者は全部同じというゆとり理論
570デフォルトの名無しさん
2020/06/07(日) 03:47:02.63ID:kmJ+/rqz >>564
A列の最終行を探して次の行に数を入れる
A列の最終行を探して次の行に数を入れる
571デフォルトの名無しさん
2020/06/07(日) 03:48:37.81ID:kmJ+/rqz 最終行は値の入ってる最後って意味ね
572デフォルトの名無しさん
2020/06/07(日) 05:24:32.66ID:cf9XL00M まずは「1ー100」をマトモに書けるようになるのが先決だな
573デフォルトの名無しさん
2020/06/07(日) 05:49:46.12ID:dyM/5p3V >>544
再帰はスマートに書けることも多いけど再帰の数だけメモリを消費する
ファイル列挙みたいな大量になりかねないデータを扱う場合はおすすめできない
時間的にもメリットがないどころか下手すると遅くなり得る
列挙程度のどうでもいいような処理に使うべきじゃないよ
再帰はスマートに書けることも多いけど再帰の数だけメモリを消費する
ファイル列挙みたいな大量になりかねないデータを扱う場合はおすすめできない
時間的にもメリットがないどころか下手すると遅くなり得る
列挙程度のどうでもいいような処理に使うべきじゃないよ
574デフォルトの名無しさん
2020/06/07(日) 07:38:47.26ID:czcu/Wo5575デフォルトの名無しさん
2020/06/07(日) 07:53:48.37ID:MHP0r7Cu576デフォルトの名無しさん
2020/06/07(日) 07:56:27.57ID:ntu7XVDq コマンドプロンプトで十分だと思うけど。
VBAでやると、ファイル名に特殊文字が使われていた時に止まって地味にウザい。
VBAでやると、ファイル名に特殊文字が使われていた時に止まって地味にウザい。
577デフォルトの名無しさん
2020/06/07(日) 08:33:05.30ID:xH2ID0fk578デフォルトの名無しさん
2020/06/07(日) 08:38:56.41ID:ntu7XVDq579デフォルトの名無しさん
2020/06/07(日) 09:55:56.05ID:kdiJvE9H >>559
さんきゅ
さんきゅ
580デフォルトの名無しさん
2020/06/07(日) 13:01:44.81ID:H9nBLvae581デフォルトの名無しさん
2020/06/07(日) 13:10:29.47ID:xH2ID0fk582デフォルトの名無しさん
2020/06/07(日) 13:12:52.96ID:xH2ID0fk583デフォルトの名無しさん
2020/06/07(日) 15:23:54.63ID:H9nBLvae >>582
具体的なこと書かないであり得るとか言われてもなぁw
具体的なこと書かないであり得るとか言われてもなぁw
584デフォルトの名無しさん
2020/06/07(日) 16:37:31.43ID:ntu7XVDq585デフォルトの名無しさん
2020/06/07(日) 17:05:54.93ID:odk7pmo/ ファイル名に使えるのにVBAで扱えない文字なんて心当たりがないので、ぜひ具体的な文字を教えてくれ
586デフォルトの名無しさん
2020/06/07(日) 17:48:58.65ID:EhPxLCve おすすめの教本ありますか?
587デフォルトの名無しさん
2020/06/07(日) 17:49:37.87ID:H9nBLvae588デフォルトの名無しさん
2020/06/07(日) 18:20:31.92ID:s05OkEKn589デフォルトの名無しさん
2020/06/07(日) 18:34:00.18ID:Rq/eP/Hm VBAでは無いけれど
今回のオンライン申請では氏名の間に空白スペースがあったり
住所のハイフンなんかでエラーだったよ
山 田 花 子
山田 花子
山田 は な 子
11-20-13
十一一二十ー十三
一丁目 II ノ丘 ハイツ III
一- 弐- 三
今回のオンライン申請では氏名の間に空白スペースがあったり
住所のハイフンなんかでエラーだったよ
山 田 花 子
山田 花子
山田 は な 子
11-20-13
十一一二十ー十三
一丁目 II ノ丘 ハイツ III
一- 弐- 三
590デフォルトの名無しさん
2020/06/07(日) 18:53:28.87ID:H9nBLvae だから何?
それそういう仕様なんだろ(まあバグかもしれんが)
それそういう仕様なんだろ(まあバグかもしれんが)
591デフォルトの名無しさん
2020/06/07(日) 18:56:58.14ID:ntu7XVDq >>587
ああ、確かに特殊文字じゃ書けないわな。
|あいうえお 一番左にカーソルがある状態。
あ|いうえお 1回右を押す
あい|うえお 2回右を押す
あい|うえお 3回右を押す ←2回目と3回目が変わらない。こういう状態になる文字だよ。
あいう|えお 4回右を押す
あいうえ|お 5回右を押す
これで満足か?
ああ、確かに特殊文字じゃ書けないわな。
|あいうえお 一番左にカーソルがある状態。
あ|いうえお 1回右を押す
あい|うえお 2回右を押す
あい|うえお 3回右を押す ←2回目と3回目が変わらない。こういう状態になる文字だよ。
あいう|えお 4回右を押す
あいうえ|お 5回右を押す
これで満足か?
592デフォルトの名無しさん
2020/06/07(日) 19:05:10.46ID:ntu7XVDq >>585
特殊以外だと、日本語環境で中国語とか。
特殊以外だと、日本語環境で中国語とか。
593デフォルトの名無しさん
2020/06/07(日) 19:26:44.01ID:eHR7BWdB >>589
それ例ではスペースとかハイフン無いのに入力してエラーのパターンでは
それ例ではスペースとかハイフン無いのに入力してエラーのパターンでは
594デフォルトの名無しさん
2020/06/07(日) 19:30:43.11ID:H9nBLvae595デフォルトの名無しさん
2020/06/07(日) 20:18:15.14ID:ZURHSwDA そういえばADOを使ったcsv取り込み機能でうちの業務システムから出力したcsvファイルを取り込んだらエラーが出たことあったな。
ファイル名変えたら取り込めたけど。
ファイル名変えたら取り込めたけど。
596デフォルトの名無しさん
2020/06/07(日) 20:32:18.62ID:1v0hAbPt597582
2020/06/07(日) 20:50:04.89ID:1v0hAbPt ファイル名に?が入ったまま何かの処理をすればエラ―吐いて止まるというのは考えられる。
というか、何で俺が解説しなきゃならねえんだよ。
頼むぜw
というか、何で俺が解説しなきゃならねえんだよ。
頼むぜw
598582
2020/06/07(日) 20:56:23.87ID:1v0hAbPt >>589
そいつはレベルが低いな。
スペースなんて正式な住所や氏名にはあり得ねえとして、入力したもんから片っ端から抜いちまう処理を入れるもんだ。
ハイフンはちょっとあり得る。
普通はマイナス使うと思うんだが罫線記号使ったり似たのがいっぱいあるからな。
そいつはレベルが低いな。
スペースなんて正式な住所や氏名にはあり得ねえとして、入力したもんから片っ端から抜いちまう処理を入れるもんだ。
ハイフンはちょっとあり得る。
普通はマイナス使うと思うんだが罫線記号使ったり似たのがいっぱいあるからな。
599デフォルトの名無しさん
2020/06/07(日) 21:55:32.54ID:XVHV5xvT これだな
>Excel VBA 質問スレ Part43
>274 名前:デフォルトの名無しさん[] 投稿日:2016/12/02(金) 22:33:29.62 ID:rRSQCExt [1/2]
>ちょっと質問
>
>・おもむろにファイルエクスプローラを開く
>・なんでもいいからファイルのプロパティを開く
>・そこの作成日時をドラッグする
>・セルのA1にペーストする
>
>例えば 2013?年?12?月?1?日、??17:02:28
>これを(すでに文字化けしてると思うが)
>2013/12/1 17:02:28
>に整形したいんだけど
>どうすればいいんだ?
>半角に見えるけどサクラでみるとU+200Fとなっている
>中には数値の間にも混入しているのもある
>最初からFSOで取得するのは無しで
>すでに手動で取り込んだ数百件ものデータなんだ
>よろしくお願いします
>Excel VBA 質問スレ Part43
>274 名前:デフォルトの名無しさん[] 投稿日:2016/12/02(金) 22:33:29.62 ID:rRSQCExt [1/2]
>ちょっと質問
>
>・おもむろにファイルエクスプローラを開く
>・なんでもいいからファイルのプロパティを開く
>・そこの作成日時をドラッグする
>・セルのA1にペーストする
>
>例えば 2013?年?12?月?1?日、??17:02:28
>これを(すでに文字化けしてると思うが)
>2013/12/1 17:02:28
>に整形したいんだけど
>どうすればいいんだ?
>半角に見えるけどサクラでみるとU+200Fとなっている
>中には数値の間にも混入しているのもある
>最初からFSOで取得するのは無しで
>すでに手動で取り込んだ数百件ものデータなんだ
>よろしくお願いします
600デフォルトの名無しさん
2020/06/07(日) 22:23:02.67ID:QPxy+dct 再現しないぞ
601デフォルトの名無しさん
2020/06/07(日) 22:44:34.20ID:Zvt1FY8k602デフォルトの名無しさん
2020/06/07(日) 23:18:32.86ID:kciisc/v 前スレでここで教えて貰ったのが完成した
課のみんなのPCに入れて使いたいらしい
パス指定するタイプだから
・読取専用にする
・プロジェクトプロパティをロック
・C直下に置いてショートカットをデスクトップに置いてやる
・シート名は変えるなと徹底
こんだけ教えとけばまぁ大丈夫だよね?
課のみんなのPCに入れて使いたいらしい
パス指定するタイプだから
・読取専用にする
・プロジェクトプロパティをロック
・C直下に置いてショートカットをデスクトップに置いてやる
・シート名は変えるなと徹底
こんだけ教えとけばまぁ大丈夫だよね?
603デフォルトの名無しさん
2020/06/07(日) 23:22:24.39ID:wDFSrhzA セルの行と列の変数名って業務でよく使うんだけど
Dim r As Long '行
Dim c As Long '列
これで癖付けてっていいですか?いいですよね?
Dim r As Long '行
Dim c As Long '列
これで癖付けてっていいですか?いいですよね?
604デフォルトの名無しさん
2020/06/07(日) 23:26:23.34ID:Zvt1FY8k605デフォルトの名無しさん
2020/06/07(日) 23:35:39.43ID:Zvt1FY8k >>603
そのコード読むのが自分だけか複数人かでメンテしだいじゃ無いの
そのコード読むのが自分だけか複数人かでメンテしだいじゃ無いの
606デフォルトの名無しさん
2020/06/08(月) 01:11:56.88ID:VAdCiuLB607デフォルトの名無しさん
2020/06/08(月) 07:02:43.86ID:upiiQwtH >>606
ググるとFileSystemObject使えって書いてあるな
ググるとFileSystemObject使えって書いてあるな
608582
2020/06/08(月) 07:46:04.95ID:ACGXca97 >>607
でも、変数で受けちまうと何使っても?になっちまうよ。
それにFileSystemObjectのファイル列挙は糞遅かった筈。
特別な理由が無いならエラーで抜けちまって、特殊なファイル名には非対応とメッセージ出した方が良い気がする。
でも、変数で受けちまうと何使っても?になっちまうよ。
それにFileSystemObjectのファイル列挙は糞遅かった筈。
特別な理由が無いならエラーで抜けちまって、特殊なファイル名には非対応とメッセージ出した方が良い気がする。
609582
2020/06/08(月) 08:00:05.61ID:ACGXca97 >>601
少し住所を扱う処理を動かせば直ぐに気付くレベルの話だよ。
特にスペースなんて人名や住所以外でもよくある話。
全角だろうが半角だろうが""に変換しちまうのはよくやるだろう。
まあ、全角半角は数字とかアルファベットでも問題になるからその前にStrConv使って統一するとかが普通の処理だろう。
ハイフンだって思いつくものはマイナスに変換する程度のことはする。
少し住所を扱う処理を動かせば直ぐに気付くレベルの話だよ。
特にスペースなんて人名や住所以外でもよくある話。
全角だろうが半角だろうが""に変換しちまうのはよくやるだろう。
まあ、全角半角は数字とかアルファベットでも問題になるからその前にStrConv使って統一するとかが普通の処理だろう。
ハイフンだって思いつくものはマイナスに変換する程度のことはする。
610デフォルトの名無しさん
2020/06/08(月) 08:12:22.59ID:/JIEFRnW むしろテキストボックスのEN_UPDATEでスペースやハイフンを消せば楽
郵便番号欄は数字以外受け付けないようにスタイル指定するだけでもいい
郵便番号欄は数字以外受け付けないようにスタイル指定するだけでもいい
611デフォルトの名無しさん
2020/06/08(月) 08:46:24.73ID:k1oezjz2 フォルダを指定し、そのフォルダ内の全てのブックの、各ブックのシート"sire"の2行目から最終行をコピーして
シートcompの最下行の一つ下に張り付けていき、I列に各ブック名を記入していくマクロを教えてください。
Sub comp()
'フォルダを選択
Dim path As String
Dim r As Long
Dim buf As String
Dim i As Long
Dim filename As String
Dim mysheet As Worksheet
Dim srcbook As Workbook
Dim srcsheet As Worksheet
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = 0 Then
MsgBox "キャンセルされました。"
Exit Sub
End If
path = .SelectedItems(1)
End With
Application.ScreenUpdating = False
シートcompの最下行の一つ下に張り付けていき、I列に各ブック名を記入していくマクロを教えてください。
Sub comp()
'フォルダを選択
Dim path As String
Dim r As Long
Dim buf As String
Dim i As Long
Dim filename As String
Dim mysheet As Worksheet
Dim srcbook As Workbook
Dim srcsheet As Worksheet
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = 0 Then
MsgBox "キャンセルされました。"
Exit Sub
End If
path = .SelectedItems(1)
End With
Application.ScreenUpdating = False
612デフォルトの名無しさん
2020/06/08(月) 08:47:00.39ID:k1oezjz2 続き
Range("A1").Value = "担当者"
Range("B1").Value = "行程1"
Range("C1").Value = "件名1"
Range("D1").Value = "行程2"
Range("E1").Value = "件名2"
Range("F1").Value = "行程3"
Range("G1").Value = "件名3"
Range("H1").Value = "期間"
Range("I1").Value = "グループ名"
Set mysheet = ThisWorkbook.Worksheets("comp")
Debug.Print myseet
buf = Dir(path & "\*.xls") 'フォルダ内の全ファイル名
Debug.Print buf
Do While buf <> ""
Set srcbook = Workbooks.Open(path & "\" & buf)
Set srcsheet = srcbook.Worksheets("sire")
Range("A1").Value = "担当者"
Range("B1").Value = "行程1"
Range("C1").Value = "件名1"
Range("D1").Value = "行程2"
Range("E1").Value = "件名2"
Range("F1").Value = "行程3"
Range("G1").Value = "件名3"
Range("H1").Value = "期間"
Range("I1").Value = "グループ名"
Set mysheet = ThisWorkbook.Worksheets("comp")
Debug.Print myseet
buf = Dir(path & "\*.xls") 'フォルダ内の全ファイル名
Debug.Print buf
Do While buf <> ""
Set srcbook = Workbooks.Open(path & "\" & buf)
Set srcsheet = srcbook.Worksheets("sire")
613デフォルトの名無しさん
2020/06/08(月) 08:47:32.50ID:k1oezjz2 続き
filename = 'srcsheetの拡張子なしのファイル名を取得
'シートの内容を2行目以降コピー
srcsheet.Range(Cells(2, 8), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 8)).Copy
'myseetの最下行の一つ下に値として貼り付け
mysheet.Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).PasteSpecial xlPasteValues
'I列にそれぞれのファイル名を入力
For r = Cells(Rows.Count, 9).End(xlUp).Row + 1 To Cells(Rows.Count, 1).End(xlUp).Row
Range("I" & r).Value = filename
Next r
srcbook.Close False
buf = Dir()
Loop
Cells.EntireColumn.AutoFit
Application.ScreenUpdating = True
End Sub
filename = 'srcsheetの拡張子なしのファイル名を取得
'シートの内容を2行目以降コピー
srcsheet.Range(Cells(2, 8), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 8)).Copy
'myseetの最下行の一つ下に値として貼り付け
mysheet.Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).PasteSpecial xlPasteValues
'I列にそれぞれのファイル名を入力
For r = Cells(Rows.Count, 9).End(xlUp).Row + 1 To Cells(Rows.Count, 1).End(xlUp).Row
Range("I" & r).Value = filename
Next r
srcbook.Close False
buf = Dir()
Loop
Cells.EntireColumn.AutoFit
Application.ScreenUpdating = True
End Sub
614デフォルトの名無しさん
2020/06/08(月) 10:43:42.37ID:pUpXY1nL ワークシートの指定について
Activesheetだと動いて、worksheets(index)やworksheets("シート名")にするとプログラムが動かないことが多いのですが、何故でしょうか
下のようなプログラムを作りました。(Sheet2のA列の数字でSheet1にフィルターをかけて、pdf出力を繰り返す)
Sub Macro3()
For Each c In Worksheets("Sheet2").Range("A1:A68")
i = c.Value
a=1
Worksheets(1).Range("$B$4:$N$6492").AutoFilter Field:=1, Criteria1:=i
Worksheets(1).PageSetup.RightHeader = " " & i
r = Range("$B$5:$B$6492").Find(i).Row
Worksheets(1).ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Users\Documents" & i & "." & Cells(r, 11).Value
Next c
End Sub
これを実行しても、フィルターがかからず、pdf出力メソッドの部分でエラーが起きます。
しかし、Worksheets(1) を Activesheetに直して、Sheet1をアクティブにした状態で動かすと正常に動きます。
イミディエイトウィンドウでWorksheets(1)が正しく指定されているかも確認しましたが、されていました。
一体何が原因なのでしょうか。
Activesheetだと動いて、worksheets(index)やworksheets("シート名")にするとプログラムが動かないことが多いのですが、何故でしょうか
下のようなプログラムを作りました。(Sheet2のA列の数字でSheet1にフィルターをかけて、pdf出力を繰り返す)
Sub Macro3()
For Each c In Worksheets("Sheet2").Range("A1:A68")
i = c.Value
a=1
Worksheets(1).Range("$B$4:$N$6492").AutoFilter Field:=1, Criteria1:=i
Worksheets(1).PageSetup.RightHeader = " " & i
r = Range("$B$5:$B$6492").Find(i).Row
Worksheets(1).ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Users\Documents" & i & "." & Cells(r, 11).Value
Next c
End Sub
これを実行しても、フィルターがかからず、pdf出力メソッドの部分でエラーが起きます。
しかし、Worksheets(1) を Activesheetに直して、Sheet1をアクティブにした状態で動かすと正常に動きます。
イミディエイトウィンドウでWorksheets(1)が正しく指定されているかも確認しましたが、されていました。
一体何が原因なのでしょうか。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- クリスマスの「予定なし」54% [少考さん★]
- 「中国人の訪日熱は冷めた」 人気旅行先から日本外れる 14日で自粛呼びかけ1カ月 ★2 [蚤の市★]
- 最新版Z級クソ映画ランキングが決定! [牛丼★]
- 日銀0.75%に利上げへ、30年ぶりの水準に 19日金融政策決定会合 [蚤の市★]
- 【STARTO ENTERTAINMENT】SUPER EIGHTの横山裕、フジ『ドッキリGP』ロケで全治2ヶ月の重傷 [Ailuropoda melanoleuca★]
- 公用車カーナビのNHK受信料「全額免除を」 千葉市議会、国に制度創設求める意見書可決 [少考さん★]
- 【実況】博衣こよりのえちえち機動戦士ガンダム逆襲のシャア🧪★4
- 【実況】博衣こよりのえちえち機動戦士ガンダム逆襲のシャア🧪★5
- フィンランド人国会議員「つり目はアジア人差別じゃない!!」と擁護投稿開始 [469534301]
- 茶ぁしばこうや··· ( ¨̮ )︎︎𖠚ᐝ2
- コーヒー、来年3月から30パーセント値上げへ [709039863]
- 愛国者「釘を使わない日本独自の伝統工法スゴイ!」X民「それ中国起源ですよ」→批判殺到 [834922174]
