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:Nkoph0aj177デフォルトの名無しさん
2020/05/20(水) 15:56:33.77ID:a9xbkMkn 余談だがグループの中から1人をランダムで選ぶ場合、
同じことを繰り返すと同じ人が選ばれる可能性がでてくる
それを無くしたい場合はシャッフルしてから順番に選ぶといい
同じことを繰り返すと同じ人が選ばれる可能性がでてくる
それを無くしたい場合はシャッフルしてから順番に選ぶといい
178デフォルトの名無しさん
2020/05/20(水) 17:56:09.89ID:IoSOKpcA 何かをさせるときに一度リセットする的なアレですね。
プロージャくっつけて作ってる初心者だが何となくその感覚
スマホとPCのデータが両方消えて
前スレで乱数の発生教えてくれた人のコードが見れなくなったが、やべえ
プロージャくっつけて作ってる初心者だが何となくその感覚
スマホとPCのデータが両方消えて
前スレで乱数の発生教えてくれた人のコードが見れなくなったが、やべえ
179デフォルトの名無しさん
2020/05/20(水) 18:10:15.58ID:bnGR2vkC いや選ばれる人の立場になると、
俺前回やったのにまた俺?他の選ばれてない人はズルくね?みたいな
俺前回やったのにまた俺?他の選ばれてない人はズルくね?みたいな
180デフォルトの名無しさん
2020/05/20(水) 22:38:53.36ID:cJtMR3HM 前スレの教えてくれた恩人のコードやっと見つけたあああああ
Sub 乱数発生させる()
For 項目 = 1 To 6 '項目数を変更
列 = 項目 + 2
最小 = WorksheetFunction.Min(Cells(6, 列).Resize(30))
最大 = WorksheetFunction.Max(Cells(6, 列).Resize(30))
幅 = 最大 - 最小
For サンプル = 1 To 25 'サンプル数
行 = サンプル + 5
If Cells(行, 列) = "" Then
Cells(行, 列).NumberFormatLocal = "0.000"
Cells(行, 列) = Rnd() * 幅 + 最小
Cells(行, 列) = Round(Rnd() * 幅 + 最小, 3)
End If
Next
Next
End Sub
これがC6がサンプル1の項目1が始まりになるシートで使えてるんだけど
これをC12からとかに変えるにはどこ弄ればいいですか?
誰かコメントをこれに添えてもらえませんか…
前スレの大恩人に救われたコードを更に流用したいです
Sub 乱数発生させる()
For 項目 = 1 To 6 '項目数を変更
列 = 項目 + 2
最小 = WorksheetFunction.Min(Cells(6, 列).Resize(30))
最大 = WorksheetFunction.Max(Cells(6, 列).Resize(30))
幅 = 最大 - 最小
For サンプル = 1 To 25 'サンプル数
行 = サンプル + 5
If Cells(行, 列) = "" Then
Cells(行, 列).NumberFormatLocal = "0.000"
Cells(行, 列) = Rnd() * 幅 + 最小
Cells(行, 列) = Round(Rnd() * 幅 + 最小, 3)
End If
Next
Next
End Sub
これがC6がサンプル1の項目1が始まりになるシートで使えてるんだけど
これをC12からとかに変えるにはどこ弄ればいいですか?
誰かコメントをこれに添えてもらえませんか…
前スレの大恩人に救われたコードを更に流用したいです
181デフォルトの名無しさん
2020/05/20(水) 23:01:11.08ID:cJtMR3HM Sub 乱数発生させる()
For 項目 = 1 To 20 '項目数を変更
列 = 項目 +
最小 = WorksheetFunction.Min(Cells(6, 列).Resize(30))
最大 = WorksheetFunction.Max(Cells(6, 列).Resize(30))
幅 = 最大 - 最小
For サンプル = 1 To 25 'サンプル数
行 = サンプル + 11
If Cells(行, 列) = "" Then
Cells(行, 列).NumberFormatLocal = "0.000"
Cells(行, 列) = Rnd() * 幅 + 最小
Cells(行, 列) = Round(Rnd() * 幅 + 最小, 3)
End If
Next
Next
End Sub
項目数を20に変えてC12セルから入力させたいんだけどWorksheetfunctionのとこの6と30も変えないとダメですかねこれ
乱数が狂うのかなぁ
For 項目 = 1 To 20 '項目数を変更
列 = 項目 +
最小 = WorksheetFunction.Min(Cells(6, 列).Resize(30))
最大 = WorksheetFunction.Max(Cells(6, 列).Resize(30))
幅 = 最大 - 最小
For サンプル = 1 To 25 'サンプル数
行 = サンプル + 11
If Cells(行, 列) = "" Then
Cells(行, 列).NumberFormatLocal = "0.000"
Cells(行, 列) = Rnd() * 幅 + 最小
Cells(行, 列) = Round(Rnd() * 幅 + 最小, 3)
End If
Next
Next
End Sub
項目数を20に変えてC12セルから入力させたいんだけどWorksheetfunctionのとこの6と30も変えないとダメですかねこれ
乱数が狂うのかなぁ
182デフォルトの名無しさん
2020/05/20(水) 23:30:59.51ID:c0Xo7Xk6 自分で考えることもしない厚かましい馬鹿は消えろ
183デフォルトの名無しさん
2020/05/20(水) 23:45:16.86ID:cJtMR3HM Sub 乱数発生させる()
For 項目 = 1 To 20 '項目数を変更
列 = 項目 +
最小 = WorksheetFunction.Min(Cells(12, 列).Resize(36))
最大 = WorksheetFunction.Max(Cells(12, 列).Resize(36))
幅 = 最大 - 最小
For サンプル = 1 To 25 'サンプル数
行 = サンプル + 11
If Cells(行, 列) = "" Then
Cells(行, 列).NumberFormatLocal = "0.000"
Cells(行, 列) = Rnd() * 幅 + 最小
Cells(行, 列) = Round(Rnd() * 幅 + 最小, 3)
End If
Next
Next
End Sub
考えたけどこれかなぁ
他ののまっさらなシートだと乱数再現できた
けど反映させたいシートだと乱数が狂う
配置も数値も同じなのに
シートの設定かぁ
For 項目 = 1 To 20 '項目数を変更
列 = 項目 +
最小 = WorksheetFunction.Min(Cells(12, 列).Resize(36))
最大 = WorksheetFunction.Max(Cells(12, 列).Resize(36))
幅 = 最大 - 最小
For サンプル = 1 To 25 'サンプル数
行 = サンプル + 11
If Cells(行, 列) = "" Then
Cells(行, 列).NumberFormatLocal = "0.000"
Cells(行, 列) = Rnd() * 幅 + 最小
Cells(行, 列) = Round(Rnd() * 幅 + 最小, 3)
End If
Next
Next
End Sub
考えたけどこれかなぁ
他ののまっさらなシートだと乱数再現できた
けど反映させたいシートだと乱数が狂う
配置も数値も同じなのに
シートの設定かぁ
184デフォルトの名無しさん
2020/05/20(水) 23:49:11.96ID:Khp9j2eL 数千行〜数万行のデータが格納されてるシートで、
ある特定の範囲で最大文字数を取得するには
配列関数で{Max(Len(A1:A10))}とすれば良いですが(VBA上でEvaluateを用いて実装してます)、その最大文字数があるセルの場所(行番号)を特定する方法はありますか?
最大文字数のセルが複数ある場合はその全てのセルの行番号を取得したいです
最終的に、範囲内の最大文字数のセルの背景色を変えたいのが目的です
ある特定の範囲で最大文字数を取得するには
配列関数で{Max(Len(A1:A10))}とすれば良いですが(VBA上でEvaluateを用いて実装してます)、その最大文字数があるセルの場所(行番号)を特定する方法はありますか?
最大文字数のセルが複数ある場合はその全てのセルの行番号を取得したいです
最終的に、範囲内の最大文字数のセルの背景色を変えたいのが目的です
185デフォルトの名無しさん
2020/05/21(木) 00:19:06.01ID:OWznaKXu >>184
セルの文字数がその最大文字数と同じなら色変えるっていう条件付き書式を設定する
セルの文字数がその最大文字数と同じなら色変えるっていう条件付き書式を設定する
186デフォルトの名無しさん
2020/05/21(木) 00:48:50.73ID:V79mjqtT187デフォルトの名無しさん
2020/05/21(木) 01:01:13.95ID:eV6pHfb6 わかった。
けどもう後には引けんほど次元の高い事やらせてて手に負えないわ
けどもう後には引けんほど次元の高い事やらせてて手に負えないわ
188デフォルトの名無しさん
2020/05/21(木) 03:10:09.62ID:u8xoMicA 気づくの遅すぎ
189デフォルトの名無しさん
2020/05/21(木) 06:58:06.98ID:Qgph+4Ei フォームのラベルに計算結果を表示について。
結果がプラスならそのまま、マイナスなら赤字にマイナス記号を付けるにはどうしたらいいですか?
例
350
-350←赤字
結果がプラスならそのまま、マイナスなら赤字にマイナス記号を付けるにはどうしたらいいですか?
例
350
-350←赤字
190デフォルトの名無しさん
2020/05/21(木) 07:11:40.31ID:uDeLtUtB >>183
セル範囲の内容で乱数の範囲が設定されているからデータが入力されていないと乱数にならないのに、
そこにデータが入力されていると値が更新されない
なかなかのジレンマだね
余談だけど、直感的にわかりにくいから、ループカウンタは列と行そのものにした方がいいと思うぞ
あと、項目数と基準セルを変えたいなら、それを変数にして、こんな感じ
項目数 = 20
サンプル数 = 25
行0 = Range("C12").Row
列0 = Range("C12").Column
For 列 = 列0 To 列0 + 項目数 - 1
...以降も上記変数で置き換える
セル範囲の内容で乱数の範囲が設定されているからデータが入力されていないと乱数にならないのに、
そこにデータが入力されていると値が更新されない
なかなかのジレンマだね
余談だけど、直感的にわかりにくいから、ループカウンタは列と行そのものにした方がいいと思うぞ
あと、項目数と基準セルを変えたいなら、それを変数にして、こんな感じ
項目数 = 20
サンプル数 = 25
行0 = Range("C12").Row
列0 = Range("C12").Column
For 列 = 列0 To 列0 + 項目数 - 1
...以降も上記変数で置き換える
191デフォルトの名無しさん
2020/05/21(木) 08:07:12.30ID:Sgq4UdRX192デフォルトの名無しさん
2020/05/21(木) 12:39:59.39ID:VB42BHka >>190
それとこのコード見てさらっとそうやって理解できるってやっぱすごいね
仰るとおり今記入してある数値はそのまま
で残りその数値を元に乱数で埋めるというのを
前スレの人が教えてくれた
みんな凄いの一言
それとこのコード見てさらっとそうやって理解できるってやっぱすごいね
仰るとおり今記入してある数値はそのまま
で残りその数値を元に乱数で埋めるというのを
前スレの人が教えてくれた
みんな凄いの一言
193デフォルトの名無しさん
2020/05/21(木) 12:46:28.85ID:/CAIZx5s 日本語よりはるかに簡単
194デフォルトの名無しさん
2020/05/21(木) 18:17:58.90ID:uS9Lfycl パワークエリでデータモデルに読み込んだ後ファイル移動等して元ファイルを参照できない状態からデータをシートに書き出したいのですがvbaで出来ますか?
手動では既存の接続からテーブルとして書き出せるのですがマクロ化するとクエリの更新処理でパスが見つかりませんというエラーになります
手動では既存の接続からテーブルとして書き出せるのですがマクロ化するとクエリの更新処理でパスが見つかりませんというエラーになります
195デフォルトの名無しさん
2020/05/21(木) 20:15:46.18ID:2OHs6iV3 >>189
その文章そのまんま単純に処理に起こすだけでいけるだろう
その文章そのまんま単純に処理に起こすだけでいけるだろう
196デフォルトの名無しさん
2020/05/21(木) 20:23:35.62ID:L96ERFQO >>194
読込時にテーブルデータを別シートにコピーするようにしとけば?
読込時にテーブルデータを別シートにコピーするようにしとけば?
197デフォルトの名無しさん
2020/05/21(木) 21:28:40.44ID:1bkcSVS7 >>194
Excel.Currentworkbookで、テーブルの値をパスとして読み込むようにしておいて、ファイル移動したらVBAでそのテーブルの値を書き換えるようにする
Excel.Currentworkbookで、テーブルの値をパスとして読み込むようにしておいて、ファイル移動したらVBAでそのテーブルの値を書き換えるようにする
198デフォルトの名無しさん
2020/05/21(木) 22:27:29.78ID:eV6pHfb6 銀行まるめ型だっけ
仕事で四捨五入多用する俺はあの機能がうざすぎる
Format関数使ってるけど素直にRound関数はエクセルと同じ機能にしろよマジで
仕事で四捨五入多用する俺はあの機能がうざすぎる
Format関数使ってるけど素直にRound関数はエクセルと同じ機能にしろよマジで
199デフォルトの名無しさん
2020/05/21(木) 23:25:30.93ID:uS9Lfycl200デフォルトの名無しさん
2020/05/21(木) 23:51:59.74ID:g1Bqd7P3 ある何かをやりたいときに骨子になるコードが完成するともうそこから手直しが楽しくて止まらないわ
201デフォルトの名無しさん
2020/05/22(金) 00:18:17.28ID:TbAUFCKp プロパティと引数の使い分けがいまいちわからん
クラス内の一つのプロシージャで利用する変数なら引数で渡してよいの?
クラス内の一つのプロシージャで利用する変数なら引数で渡してよいの?
202デフォルトの名無しさん
2020/05/22(金) 03:00:05.94ID:qVNfs0Gr 動けばいいんじゃね
203デフォルトの名無しさん
2020/05/22(金) 04:52:54.15ID:HmQhS1LZ プロパティ
とりあえず1個ずつセットしといて、処理の開始は後回しにできる
順番を意識しなくていい
引数
複数の変数を参照渡ししたい時、構造体やサブプロパティは微妙にめんどくさい
セット忘れが防げそう(願望
とりあえず1個ずつセットしといて、処理の開始は後回しにできる
順番を意識しなくていい
引数
複数の変数を参照渡ししたい時、構造体やサブプロパティは微妙にめんどくさい
セット忘れが防げそう(願望
204デフォルトの名無しさん
2020/05/22(金) 06:38:47.78ID:mpVA2e0J >>201
一応定義としては、プロパティはオブジェクトの設定や状態を見たり書いたりするものという事になってる
一度設定したら変えることが殆どない設定はプロパティ、
ちょくちょく変える設定は引数、
みたいな感じでいいと思う
一応定義としては、プロパティはオブジェクトの設定や状態を見たり書いたりするものという事になってる
一度設定したら変えることが殆どない設定はプロパティ、
ちょくちょく変える設定は引数、
みたいな感じでいいと思う
205デフォルトの名無しさん
2020/05/22(金) 07:33:08.57ID:TbAUFCKp206デフォルトの名無しさん
2020/05/22(金) 11:06:37.48ID:y/Lzet5S >>205
色々作ってるとそのうちなんとなくどっちにした方がいいかわかってくると思うよ
色々作ってるとそのうちなんとなくどっちにした方がいいかわかってくると思うよ
207デフォルトの名無しさん
2020/05/22(金) 13:23:07.02ID:DQGXczns 変数ってみんなどんな付け方してんの
My〜とかそういう変数付けたりしてるサイトもあれば色々だね
My〜とかそういう変数付けたりしてるサイトもあれば色々だね
208デフォルトの名無しさん
2020/05/22(金) 13:55:43.58ID:uqJ26gv2 日本語で
「わたしの〜」とかそういう変数名を付けたりしてる。
「わたしの〜」とかそういう変数名を付けたりしてる。
209デフォルトの名無しさん
2020/05/22(金) 18:08:02.11ID:FMkBDb3b 拙者も
210デフォルトの名無しさん
2020/05/22(金) 18:16:23.98ID:CsJitSv2 我(われ)
某(それがし)
拙(せつ)
朕(ちん)
某(それがし)
拙(せつ)
朕(ちん)
211デフォルトの名無しさん
2020/05/22(金) 21:51:59.64ID:Cbv5LLjj セルの数式中で条件成立時のみHYPERLINK関数を生成してるのですが、
@HYPERLINK関数が生成された事を確認
Aリンク切れが無いか確認
する事は可能でしょうか?
イメージは下記ですが、数式は複数のパターンがあり困っています
=if (A1<>"", HYPERLINK(A1&B1,B1),B1)
@HYPERLINK関数が生成された事を確認
Aリンク切れが無いか確認
する事は可能でしょうか?
イメージは下記ですが、数式は複数のパターンがあり困っています
=if (A1<>"", HYPERLINK(A1&B1,B1),B1)
212デフォルトの名無しさん
2020/05/22(金) 23:34:25.54ID:xc22QBUa 未だに二つのセルの掛け算を電卓で計算してて手入力する50歳のおじさんがいる職場なんだよな
213デフォルトの名無しさん
2020/05/23(土) 01:03:15.62ID:pi9ABoQN @HYPERLINK関数が生成された事を確認 -> 隣のセルに If (xxx, 1, 0) とかやっとけばいいんじゃないの
Aリンク切れが無いか確認 -> マクロでHTTPリクエストしてステータスコード見ないと駄目だろうね
Aリンク切れが無いか確認 -> マクロでHTTPリクエストしてステータスコード見ないと駄目だろうね
214デフォルトの名無しさん
2020/05/23(土) 04:02:16.01ID:TU97qQFp >>205
プロパティは根幹部分を触らせるメンテ用メソッド的な意味合いで用意するといいよ。
例えば「何かを〇倍にする」というメソッドを持つクラスがあったとして、
この「何か」部分が引数で、「〇倍」部分がプロパティ。
利用者はプロパティで「〇倍」を「二倍」等に変えて異なる機能を持つインスタンスを作る事が出来る。
もちろん予め二倍や三倍に設定済みのクラスを作ってもいいんだけど、
プロパティで変更出来るようにすれば一つのクラスで済むという利点がある。
インスタンス化してプロパティを変えたオブジェクトを返す関数(コンストラクタ関数)を作れば凄く便利だよ
プロパティは根幹部分を触らせるメンテ用メソッド的な意味合いで用意するといいよ。
例えば「何かを〇倍にする」というメソッドを持つクラスがあったとして、
この「何か」部分が引数で、「〇倍」部分がプロパティ。
利用者はプロパティで「〇倍」を「二倍」等に変えて異なる機能を持つインスタンスを作る事が出来る。
もちろん予め二倍や三倍に設定済みのクラスを作ってもいいんだけど、
プロパティで変更出来るようにすれば一つのクラスで済むという利点がある。
インスタンス化してプロパティを変えたオブジェクトを返す関数(コンストラクタ関数)を作れば凄く便利だよ
215デフォルトの名無しさん
2020/05/23(土) 04:04:50.94ID:TU97qQFp インスタンス化は new クラス名 でオブジェクトを作ることで、
インスタンスはその作成したオブジェクトのことね
インスタンスはその作成したオブジェクトのことね
216デフォルトの名無しさん
2020/05/23(土) 17:42:06.78ID:x2nf7i64 ExcelVBAでCSVファイルを2次元配列に格納しようと思い、そこまで作成はできました。
ここを参照しました:ttps://ateitexe.com/excel-vba-csv-to-multi-dimensional-array/
その配列に格納した後、特定の文字列がある行を削除しようと思うと、配列だとかなり手間だと感じました。
(文字列を検索、行を削除、詰める作業が必要)
だったら、そもそも配列に入れる前にそのcsvの行を無視しようと思うのですが、どうしてもうまくいきません。
どうしたらいいのでしょうか?
ここを参照しました:ttps://ateitexe.com/excel-vba-csv-to-multi-dimensional-array/
その配列に格納した後、特定の文字列がある行を削除しようと思うと、配列だとかなり手間だと感じました。
(文字列を検索、行を削除、詰める作業が必要)
だったら、そもそも配列に入れる前にそのcsvの行を無視しようと思うのですが、どうしてもうまくいきません。
どうしたらいいのでしょうか?
217デフォルトの名無しさん
2020/05/23(土) 17:46:18.03ID:105ldQbQ 文字列を検索、行を削除、詰める作業をお勧めします
218デフォルトの名無しさん
2020/05/23(土) 18:20:37.75ID:RvKaLrIF219デフォルトの名無しさん
2020/05/23(土) 18:40:31.27ID:0VGwJWuY220デフォルトの名無しさん
2020/05/23(土) 18:49:52.27ID:J+1ULzMv 特定の文字列がある行は空にすればええやん
それとも別に空の行も含まれてるんか
それとも別に空の行も含まれてるんか
221デフォルトの名無しさん
2020/05/23(土) 19:27:43.93ID:n1v+MUu8 >>216
そのどうしてもうまくいかない部分を書けよ…
そのどうしてもうまくいかない部分を書けよ…
222デフォルトの名無しさん
2020/05/23(土) 19:33:17.52ID:P5e4K719 例えば、Ruby で、入力ファイルが、
あ,いう
a,bc
1,23
require 'csv'
ary = [ ]
CSV.foreach( "input.csv" ) do |row| # 1行ずつ処理する
next if row[ 1 ] == "bc" # skip
ary.push row # 追加
end
p ary #=> [["あ", "いう"], ["1", "23"]]
あ,いう
a,bc
1,23
require 'csv'
ary = [ ]
CSV.foreach( "input.csv" ) do |row| # 1行ずつ処理する
next if row[ 1 ] == "bc" # skip
ary.push row # 追加
end
p ary #=> [["あ", "いう"], ["1", "23"]]
223デフォルトの名無しさん
2020/05/23(土) 20:02:14.42ID:FaM1nYaB 要素数を変えるような操作を配列にする場合、
VBAだと大抵は新しい配列を作るような処理にしたほうが楽
foreachで条件にあえば追加する、そんな感じ
VBAだと大抵は新しい配列を作るような処理にしたほうが楽
foreachで条件にあえば追加する、そんな感じ
224デフォルトの名無しさん
2020/05/23(土) 20:16:37.74ID:+RVUJGzG 配列に入れる前にそのcsvの行を無視しようという発想は正しいと思うぞ
Splitする前に文字列判定して、無かったときのみ n=n+1 まで実行するようにすればいけるはずだよ
それと、ary(n, i) = tmp(i) のところは要注意
csvの列数がRedimの行で設定した数分を越えると、配列の範囲外エラーが起きるので
Splitする前に文字列判定して、無かったときのみ n=n+1 まで実行するようにすればいけるはずだよ
それと、ary(n, i) = tmp(i) のところは要注意
csvの列数がRedimの行で設定した数分を越えると、配列の範囲外エラーが起きるので
225デフォルトの名無しさん
2020/05/23(土) 21:48:22.03ID:GhgCxwTJ B列の2行目から最終行に「2020/5/23」のような文字列が入力されているので
この文字列を「2020/5/23」に変換するコードを教えてください
この文字列を「2020/5/23」に変換するコードを教えてください
226デフォルトの名無しさん
2020/05/23(土) 22:07:45.65ID:DEt0hEL0227デフォルトの名無しさん
2020/05/23(土) 22:09:12.15ID:YkB5QRvg >>226
ありがとうございます!
ありがとうございます!
229デフォルトの名無しさん
2020/05/23(土) 23:15:23.23ID:RvKaLrIF230デフォルトの名無しさん
2020/05/23(土) 23:49:07.24ID:DwihZV3Z 例
数値 1500
期間 2020/05/21〜2023/02/12
この期間のセル数に数値1500の値を 均等割で入れる場合のセル数の計算方法がわかりません。
※用意してるセルの期間
2020年1月から2022年12月まで。
※ひと月3分割で1年36マス。
上旬1〜10 中旬11〜20 下旬21〜末
※2022年を超えた場合はそこまでの均等割を入れそれ以降は入れない。
※開始期間が2020年1月以前の場合は1月からの均等割を割り振る。
こんな感じの事をしたいんですけど、期間の計算方法の伝授願います。
数値 1500
期間 2020/05/21〜2023/02/12
この期間のセル数に数値1500の値を 均等割で入れる場合のセル数の計算方法がわかりません。
※用意してるセルの期間
2020年1月から2022年12月まで。
※ひと月3分割で1年36マス。
上旬1〜10 中旬11〜20 下旬21〜末
※2022年を超えた場合はそこまでの均等割を入れそれ以降は入れない。
※開始期間が2020年1月以前の場合は1月からの均等割を割り振る。
こんな感じの事をしたいんですけど、期間の計算方法の伝授願います。
231デフォルトの名無しさん
2020/05/23(土) 23:51:24.02ID:GhgCxwTJ >>225
Sub Test()
Dim cnt As Long
Dim da As Date
For cnt = 2 To Cells(Rows.Count, 2).End(xlUp).Row
da = CDate(Cells(cnt, 2))
Range("B" & cnt) = da
Next cnt
End Sub
Sub Test()
Dim cnt As Long
Dim da As Date
For cnt = 2 To Cells(Rows.Count, 2).End(xlUp).Row
da = CDate(Cells(cnt, 2))
Range("B" & cnt) = da
Next cnt
End Sub
232デフォルトの名無しさん
2020/05/24(日) 00:33:29.03ID:jgkofs6w >>230
VBA関係ないただの算数ないか
VBA関係ないただの算数ないか
233デフォルトの名無しさん
2020/05/24(日) 05:46:51.68ID:kGXS6p+T >>229
君がつけ上がってる限り現れるね
君がつけ上がってる限り現れるね
234デフォルトの名無しさん
2020/05/24(日) 06:12:40.09ID:VMYRmKv4 謙虚にしてたらもっとひどかった
235デフォルトの名無しさん
2020/05/24(日) 06:15:08.38ID:A7TYPIWJ Ruby の、clamp みたいな関数だろ
clamp(min, max) -> object
self を範囲内に収めます。
self <=> min が負数を返したときは min を、 self <=> max が正数を返したときは max を、
それ以外の場合は self を返します
1.clamp(0, 100) #=> 1
101.clamp(0, 100) #=> 100
-1.clamp(0, 100) #=> 0
clamp(min, max) -> object
self を範囲内に収めます。
self <=> min が負数を返したときは min を、 self <=> max が正数を返したときは max を、
それ以外の場合は self を返します
1.clamp(0, 100) #=> 1
101.clamp(0, 100) #=> 100
-1.clamp(0, 100) #=> 0
236デフォルトの名無しさん
2020/05/24(日) 09:33:40.84ID:ozGH/zB/ やたらrubyで表したがるやつなんなの?
無意味だし完全にスレチなんだけど
無意味だし完全にスレチなんだけど
237デフォルトの名無しさん
2020/05/24(日) 09:52:14.39ID:tKHuSqSe それこのスレの透明人間
238デフォルトの名無しさん
2020/05/24(日) 09:56:21.27ID:Aun0kaOs 「おれRuby知ってるんだ(どやぁ)」
じゃね?
じゃね?
239デフォルトの名無しさん
2020/05/24(日) 11:44:26.84ID:0I4G4YZw >>238
え?たかだか一つ言語知ってるだけでどや顔なんて…ありえるかもな。
え?たかだか一つ言語知ってるだけでどや顔なんて…ありえるかもな。
240デフォルトの名無しさん
2020/05/24(日) 15:25:32.37ID:ZTIdhNvp >>230
説明がよくわからない。
サンプルを用意するなど、読み手にわかりやすい工夫をすること。
(期間が複数あってよくわからん、期間の基準が上中下旬なのか2023/2/12みたいな細かい日付もあるのか、
「この期間のセル数に」とか、36「マス」とか。
自分で作ったような言葉を、相手はまず理解できないと思うこと。)
最大限理解しようとして作ってみた。
https://i.imgur.com/aYLnniP.png
https://i.imgur.com/Edwp9qW.png
説明がよくわからない。
サンプルを用意するなど、読み手にわかりやすい工夫をすること。
(期間が複数あってよくわからん、期間の基準が上中下旬なのか2023/2/12みたいな細かい日付もあるのか、
「この期間のセル数に」とか、36「マス」とか。
自分で作ったような言葉を、相手はまず理解できないと思うこと。)
最大限理解しようとして作ってみた。
https://i.imgur.com/aYLnniP.png
https://i.imgur.com/Edwp9qW.png
241デフォルトの名無しさん
2020/05/24(日) 17:31:52.38ID:aHD8sbyt >>230
ひと月を3分割って、微妙に面倒だったりするね
質問は期間の求め方なので、こんな感じでいいと思う
簡単な流れは、月の差-1を出して*3し、開始と終了の日-1を10で割って半端な分を補正する感じ
計算上、初回分も算入する必要がある事に注意(例えば、 5/24 〜 5/24 の場合、単純に引くと0 になるから+1する必要がある)
あと、月の上中下旬単位でのみ考える(2/12 は2/20と同等に扱う)
Function kikan(date1 As Date, date2 As Date) As Integer
Dim res As Integer
res = DateDiff("m", date1, date2) - 1 'VBAでは単純な月の差なのでDay(開始日)>Day(終了日) となる場合を気にしなくていい
If res < 0 Then '同じ月
res = min2((Day(date2) - 1) \ 10, 2) + 1
res = res - min2((Day(date1) - 1) \ 10, 2)
Else
res = res * 3
res = res + 3 - min2((Day(date1) - 1) \ 10, 2)
res = res + 1 + min2((Day(date2) - 1) \ 10, 2)
End If
kikan = res
End Function
Function min2(a, b) : min2 = IIf(a < b, a, b) : End Function
あと、各(月3分割)の均等割を出すとき、単純に等分した数値を次々加算していくと誤差が出る可能性があるので、その都度かけ算で計算しなおした方がいいよ
ひと月を3分割って、微妙に面倒だったりするね
質問は期間の求め方なので、こんな感じでいいと思う
簡単な流れは、月の差-1を出して*3し、開始と終了の日-1を10で割って半端な分を補正する感じ
計算上、初回分も算入する必要がある事に注意(例えば、 5/24 〜 5/24 の場合、単純に引くと0 になるから+1する必要がある)
あと、月の上中下旬単位でのみ考える(2/12 は2/20と同等に扱う)
Function kikan(date1 As Date, date2 As Date) As Integer
Dim res As Integer
res = DateDiff("m", date1, date2) - 1 'VBAでは単純な月の差なのでDay(開始日)>Day(終了日) となる場合を気にしなくていい
If res < 0 Then '同じ月
res = min2((Day(date2) - 1) \ 10, 2) + 1
res = res - min2((Day(date1) - 1) \ 10, 2)
Else
res = res * 3
res = res + 3 - min2((Day(date1) - 1) \ 10, 2)
res = res + 1 + min2((Day(date2) - 1) \ 10, 2)
End If
kikan = res
End Function
Function min2(a, b) : min2 = IIf(a < b, a, b) : End Function
あと、各(月3分割)の均等割を出すとき、単純に等分した数値を次々加算していくと誤差が出る可能性があるので、その都度かけ算で計算しなおした方がいいよ
242デフォルトの名無しさん
2020/05/24(日) 18:45:45.21ID:X8IGI7Pl 均等ではなくなることが分かっているのに均等割というのは一体
均等ではないなら分割の明確なルールと呈示するのが先だろうに
均等ではないなら分割の明確なルールと呈示するのが先だろうに
243デフォルトの名無しさん
2020/05/24(日) 20:23:46.09ID:Ij6CWItZ select case iDay
case 1 to 10
’上旬
case 11 to 20
’中旬
case else
'下旬
end select
こんなんでいいんじゃねーの
case 1 to 10
’上旬
case 11 to 20
’中旬
case else
'下旬
end select
こんなんでいいんじゃねーの
244デフォルトの名無しさん
2020/05/24(日) 20:26:51.14ID:WNKMZrc1 理解ができるのがすげぇよ
俺には文章から何がしたいのか分からん
俺には文章から何がしたいのか分からん
245デフォルトの名無しさん
2020/05/24(日) 20:35:05.58ID:CLZ8mfOM me,too
246デフォルトの名無しさん
2020/05/24(日) 20:45:14.93ID:i+YVCLEB セルに値を手動入力中にVBAから別のセルにアクセスがあるとエラー落ちするんだけど、非同期に処理する方法はないんかね。
VBA側はインターバルタイマーでデータ処理させてて、一方でユーザーはメモ入れたり諸作業したいんだ。
VBA側はインターバルタイマーでデータ処理させてて、一方でユーザーはメモ入れたり諸作業したいんだ。
247デフォルトの名無しさん
2020/05/24(日) 20:46:27.53ID:8AgUd6nh vb全然知らないんだけどサクッと教えてほしい
Range("C2").AutoFill Destination:=Range("C2:C804"), Type:=xlFillDefault
というオートフィル用をするコードがあるとする。
このコードの804部分はいつでも固定値だからセル内の数字を参照するような可変にしたい
一応このコードの前に
Volume = Range("J5").Value
として数字があるセルから数値をVolumeに得てるんだけど
このVolumeを804の部分に当てはめたい
どうしたらいい?
Range("C2").AutoFill Destination:=Range("C2:C804"), Type:=xlFillDefault
というオートフィル用をするコードがあるとする。
このコードの804部分はいつでも固定値だからセル内の数字を参照するような可変にしたい
一応このコードの前に
Volume = Range("J5").Value
として数字があるセルから数値をVolumeに得てるんだけど
このVolumeを804の部分に当てはめたい
どうしたらいい?
248デフォルトの名無しさん
2020/05/24(日) 21:22:14.11ID:xjag2nx7 >>247
馬鹿は死ねよ
馬鹿は死ねよ
249デフォルトの名無しさん
2020/05/24(日) 21:26:46.69ID:YjTDgAdj >>247
" "は文字列を表す
" "は文字列を表す
250デフォルトの名無しさん
2020/05/24(日) 21:29:42.85ID:IJT9Ws79251デフォルトの名無しさん
2020/05/24(日) 21:35:15.28ID:IJT9Ws79252デフォルトの名無しさん
2020/05/24(日) 21:50:08.32ID:8AgUd6nh >>250
C2から始める場合はどうしたらいい?
C2から始める場合はどうしたらいい?
253デフォルトの名無しさん
2020/05/24(日) 22:01:27.85ID:IJT9Ws79 volume = Range("j5")
With Range("c10")
.AutoFill Destination:=.Resize(volume)
これでだめ?
With Range("c10")
.AutoFill Destination:=.Resize(volume)
これでだめ?
254デフォルトの名無しさん
2020/05/24(日) 22:42:24.46ID:Ij6CWItZ Volume = Range("J5").Value
Range("C2").AutoFill Destination:=Range("C2:C" & cCtr(Volume)), Type:=xlFillDefault
こういうことじゃね
Range("C2").AutoFill Destination:=Range("C2:C" & cCtr(Volume)), Type:=xlFillDefault
こういうことじゃね
255デフォルトの名無しさん
2020/05/24(日) 22:43:40.18ID:Ij6CWItZ × cCtr
〇 cStr
〇 cStr
256デフォルトの名無しさん
2020/05/24(日) 23:13:25.93ID:FPjhV5Sl >>246
VBAでブックへの書き込みがないなら、外部から読み取り専用で開いてデータだけ頂いて処理する方法がある
例えばVBScriptならVBAからソースをコピペできる部分も多い
後はChangeイベントで変更が行われた時に、バックエンドとデータを同期する。
処理自体はバックエンドが行う。
サーバーは空いてるPCに(VBAで実行したければ)Excelをインストールして使えばいい。
VBAでブックへの書き込みがないなら、外部から読み取り専用で開いてデータだけ頂いて処理する方法がある
例えばVBScriptならVBAからソースをコピペできる部分も多い
後はChangeイベントで変更が行われた時に、バックエンドとデータを同期する。
処理自体はバックエンドが行う。
サーバーは空いてるPCに(VBAで実行したければ)Excelをインストールして使えばいい。
257デフォルトの名無しさん
2020/05/25(月) 03:36:22.58ID:fpmiA/eB セルに手入力してるんだから保存するんじゃね
258デフォルトの名無しさん
2020/05/25(月) 07:55:53.56ID:2rkq/dFE >>240
遅くなり申し訳ないです。説明が下手すみません。後でゆっくり読んで理解してみます。
遅くなり申し訳ないです。説明が下手すみません。後でゆっくり読んで理解してみます。
259デフォルトの名無しさん
2020/05/25(月) 07:58:34.18ID:2rkq/dFE >>241
知らないコードあるので調べて見ます。
知らないコードあるので調べて見ます。
260デフォルトの名無しさん
2020/05/25(月) 13:23:07.69ID:arQu/7J9 セルの入力規則の選択項目をコンボボックスのListindexみたいに番号抽出って出来ないんでしょうか
261デフォルトの名無しさん
2020/05/25(月) 15:12:23.39ID:TkkoIJYG できる
262デフォルトの名無しさん
2020/05/25(月) 15:21:07.89ID:TNrQR7ea "セルの入力規則の選択項目"と言っているのは、
データの入力規則ウインドウ−設定タブ−条件の設定について、
入力値の種類を"リスト"にしたときの"元の値"に入力した各値のこと?
あとわざわざ番号で抽出する意味は?
この"元の値"をVBAでセル(range)のプロパティから取得すると、だいたい下のどちらかのパターンのStringとなる。
1 "元の値"に入れたそのままのリスト用文字列(「a,b,c」など)
2 "元の値"に入れた参照セル範囲(「=$A$1:$A$5」など)
「番号抽出」とかいう言葉がよく分からんけど、上記で
1なら文字列を配列にするなどで解析して、セルの値(Value)で取得する
2なら参照先を取得して配列にするなどする
とかで"元の値"を利用できるはず
わざわざIndexを取りたいならその配列なりから取ればいい
目的がおかしくなってる可能性がある
データの入力規則ウインドウ−設定タブ−条件の設定について、
入力値の種類を"リスト"にしたときの"元の値"に入力した各値のこと?
あとわざわざ番号で抽出する意味は?
この"元の値"をVBAでセル(range)のプロパティから取得すると、だいたい下のどちらかのパターンのStringとなる。
1 "元の値"に入れたそのままのリスト用文字列(「a,b,c」など)
2 "元の値"に入れた参照セル範囲(「=$A$1:$A$5」など)
「番号抽出」とかいう言葉がよく分からんけど、上記で
1なら文字列を配列にするなどで解析して、セルの値(Value)で取得する
2なら参照先を取得して配列にするなどする
とかで"元の値"を利用できるはず
わざわざIndexを取りたいならその配列なりから取ればいい
目的がおかしくなってる可能性がある
263デフォルトの名無しさん
2020/05/25(月) 16:03:17.20ID:WdAmw2Xs >>260
Function validFormula(c as Range) '選択セルの入力規則式を取得(簡易版)
validFormula = Evaluate(c.Validation.Formula1)
End Function
というユーザー定義関数を用意して
=MATCH(A1,validFormula(A1),FALSE)
の様な感じ
Function validFormula(c as Range) '選択セルの入力規則式を取得(簡易版)
validFormula = Evaluate(c.Validation.Formula1)
End Function
というユーザー定義関数を用意して
=MATCH(A1,validFormula(A1),FALSE)
の様な感じ
264デフォルトの名無しさん
2020/05/25(月) 16:41:06.92ID:arQu/7J9 >>262
説明が下手ですいません
やりたい事は以下のとおりです。
@表示する場合
・機器と通信して、通信データ読み出すとIndex(数値)が取得できる。(変更不可)
・取得値が1の場合、選択リスト要素が"aa,bb,cc,dd"とするとセルにはaaが選択される。
A取得する場合
・セルの選択リストの選択要素が"dd"だった場合、4を返すとなる
・Index=4を通信で送る
コンボボックスだと楽に出来るのですが、セルを使った場合の対処に困っています。大量に項目があるのでコンボボックス一つずつ作成は対応できなくて。
説明が下手ですいません
やりたい事は以下のとおりです。
@表示する場合
・機器と通信して、通信データ読み出すとIndex(数値)が取得できる。(変更不可)
・取得値が1の場合、選択リスト要素が"aa,bb,cc,dd"とするとセルにはaaが選択される。
A取得する場合
・セルの選択リストの選択要素が"dd"だった場合、4を返すとなる
・Index=4を通信で送る
コンボボックスだと楽に出来るのですが、セルを使った場合の対処に困っています。大量に項目があるのでコンボボックス一つずつ作成は対応できなくて。
265デフォルトの名無しさん
2020/05/25(月) 18:18:30.74ID:pvRy3Vo6 PDF出力をするときに、ファイル名をBK19にして、同じフォルダ内の、
"納品書"というフォルダ内に保存したいのですが、保存場所が同じフォルダの同じ階層になってしまいます。
"納品書"フォルダに保存する方法をお願いします
Dim PATH_ As String 'このブックと同じフォルダの"納品書"フォルダ
〜途中省略
PATH_ = ThisWorkbook.Path & "\" & 納品書
〜途中省略
sh.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PATH_ & Range("BK19"), OpenAfterPublish:=False
それと、ネット上のサンプルの中に、For文のNextの後の変数が書いていないものがありますが、どういう時に書かなくていいんですか
"納品書"というフォルダ内に保存したいのですが、保存場所が同じフォルダの同じ階層になってしまいます。
"納品書"フォルダに保存する方法をお願いします
Dim PATH_ As String 'このブックと同じフォルダの"納品書"フォルダ
〜途中省略
PATH_ = ThisWorkbook.Path & "\" & 納品書
〜途中省略
sh.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PATH_ & Range("BK19"), OpenAfterPublish:=False
それと、ネット上のサンプルの中に、For文のNextの後の変数が書いていないものがありますが、どういう時に書かなくていいんですか
266260
2020/05/25(月) 18:21:44.47ID:arQu/7J9 出来ました。
267デフォルトの名無しさん
2020/05/25(月) 19:12:11.07ID:kYm8Dr+5 > PATH_ = ThisWorkbook.Path & "\" & 納品書
PATH_ = ThisWorkbook.Path & "\納品書"
PATH_ = ThisWorkbook.Path & "\納品書"
268デフォルトの名無しさん
2020/05/25(月) 19:17:16.20ID:0mNo0xGU すみませんエクセルですが教えてください
セルに2020/5/25と入っている。
2020/5/25(月)というテキストにしたい。
セルに2020/5/25と入っている。
2020/5/25(月)というテキストにしたい。
270デフォルトの名無しさん
2020/05/25(月) 19:32:32.80ID:RZDTWD0g >>268
セルの書式設定から表示形式をユーザー定義の yyyy/m/d(aaa) にする
セルの書式設定から表示形式をユーザー定義の yyyy/m/d(aaa) にする
271デフォルトの名無しさん
2020/05/25(月) 19:37:30.13ID:voBvEsJz ごめ
PATH_ = ThisWorkbook.Path & "\納品書\"
これは?
PATH_ = ThisWorkbook.Path & "\納品書\"
これは?
273デフォルトの名無しさん
2020/05/25(月) 20:09:54.13ID:0mNo0xGU274デフォルトの名無しさん
2020/05/25(月) 20:55:09.30ID:+lR6vdzO >>273
text関数
text関数
275デフォルトの名無しさん
2020/05/25(月) 21:16:44.80ID:Xi2PhkBU >>273
死ね
死ね
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「偽サッチャー」「自滅的」「時代遅れ」 高市首相の経済政策を海外メディアが酷評 [蚤の市★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★2 [蚤の市★]
- 【ド軍】山本由伸、WBC出場を決断!ドジャースが本人の意向を尊重、佐々木朗希はチームが故障歴を懸念で不参加 [鉄チーズ烏★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★3 [蚤の市★]
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ ★2 [蚤の市★]
- 日本人の間で脱税がブーム 所得税の追徴課税額1400億円超、過去最高 [402859164]
- 女の子集合!
- 今年の漢字、きょう発表😉 [583597859]
- 中国人、超ド正論。「チベットやウイグルに住んでるのはチベット族やウイグル族だが、アイヌから奪った土地に住んでる日本人こそ侵略者」 [314039747]
- 百合営業してるアイドル「これは営業だから…んっクチュクチュ」←これ
- 【悲報】メモリだけでなくSSDも値上がりがはじまる♥
