1 名前:1000 [2020/05/10(日) 13:43:45 ID:Nkoph0aj.net] ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※前スレ Excel VBA 質問スレ Part65 https://mevius.5ch.net/test/read.cgi/tech/1584430040/ ※デフォルト設定
165 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 20:56:41 ID:FccdSYLU.net] クルーズ船の消えた弁当
166 名前:デフォルトの名無しさん [2020/05/19(火) 21:22:42.73 ID:oItI0x3V.net] 絶対にわからん関数ばかり使ってる理解不明なコードをネットからパクって少し弄ったら完全に業務で対応できてラッキー そこから今日もユーザーフォーム適当に作ってメッセージボックスとインプットボックスを組んでいって 効率化したけど相変わらず上達せん毎日だわ
167 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 21:40:57 ID:OdQysc5C.net] ここは日記帳ではない
168 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 22:33:25.66 ID:flKz052u.net] >>156 1億2000万件のデータを、誤読無く、重複無く、生死の年月日まで 勘案して処理する自治体まで勘案してエクセルに食わせろとな?
169 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 23:58:06 ID:dbsigt0d.net] 相談させてください。 羅列されたデータにオートフィルタをかけて、その中でのランダム選択をシートを使わないでやる方法が知りたいです。 A列(1〜6年)、B列(1〜8組)、C列(名前) みたいな感じで、AとBから複数選択後にCから選び出す感じです。 今までは作業用のシートを設けてオートフィルタをかけたものを別シートにコピーし、その中でrandomで選んでいました。 諸事情により作業用シートが作れないので、おそらく配列内だとは思うのですが・・・・
170 名前:デフォルトの名無しさん mailto:sage [2020/05/20(水) 00:07:04 ID:vp7gkhOL.net] >>163 VBAなら、とりあえず乱数を発生して、その行がオートフィルタかかってたらもう一度乱数からやり直せばいいだけ
171 名前:デフォルトの名無しさん mailto:sage [2020/05/20(水) 01:09:15.99 ID:0kv4kFzW.net] 俺なら配列に入れてからやる
172 名前:デフォルトの名無しさん mailto:sage [2020/05/20(水) 02:23:38.33 ID:p47zFM4b.net] >>163 フィルタ掛けた結果をROWだけ配列に抜き出して、乱数で配列の中から一つ選べばいいんじゃね
173 名前:163 [2020/05/20(水) 06:43:20.78 ID:98prku9b.net] >>166 早速ありがとうございます そのままだとフィルターかけられたROWも選ばれません? オートフィルターかけた配列を一旦コピーすればいいのでしょうか?
174 名前:デフォルトの名無しさん mailto:sage [2020/05/20(水) 07:03:34.54 ID:skRckF1R.net] ランダム選択が目的なら、そもそも、オートフィルターにこだわる必要あるのかな? VBA使うなら、オートフィルターを扱うのは微妙に面倒だから、自前でフィルターすればいいと思うぞ
175 名前:デフォルトの名無しさん mailto:sage [2020/05/20(水) 08:27:34.61 ID:DAK+DifG.net] オートフィルタやオートフィルタ的コードは使わない VBAのみで 乱数生成は一度きり 3桁の乱数 a を生成する まず a を6で割って余りが0〜5まででるんで 0が出たら6年 1が出たら1年 2が出たら2年 3が出たら3年 4が出たら4年 5が出たら5年 とする 例えばここで2が出て2年が選択されたら さっきの乱数 a をまた使って、組数で割って余りを求める んで同じようにして 今度は選択された組の人数で割って個人に割り当てられた番号でを特定する これを繰り返して複数人を選んでいく 選ぶ過程で同じ学年はダメとかあるなら 上の例で言えば一旦2が出たら次は2
176 名前:を排除するとか 繰り返し文の中で if 使って条件つけていく 学年の数、組の数、クラス人数は予めシートに表にしておくこと とかとか [] [ここ壊れてます]
177 名前:デフォルトの名無しさん mailto:sage [2020/05/20(水) 08:28:13.58 ID:DAK+DifG.net] 一度きりってのは1人選ぶのに一度ってことでしゅ
178 名前:デフォルトの名無しさん mailto:sage [2020/05/20(水) 08:30:51.03 ID:DAK+DifG.net] 6学年あって6組の学年があったりするとだめか 階層が下がるごとに乱数生成してもいいのかね
179 名前:デフォルトの名無しさん mailto:sage [2020/05/20(水) 09:26:22 ID:CH9LsvxQ.net] 何年何組は決めておいてから誰にするかを乱数?
180 名前:デフォルトの名無しさん mailto:sage [2020/05/20(水) 09:45:48.33 ID:B3VzH1xh.net] A1からオートフィルターをかけて もし、変数aが空欄でなければ、B列で変数aと同じ値だけにしぼる もし、変数bが空欄でなければ、C列で変数bと同じ値だけにしぼる もし、変数cが空欄でなければ、D列で変数cと同じ値だけにしぼる というような書き方をおしえてください
181 名前:デフォルトの名無しさん mailto:sage [2020/05/20(水) 11:11:47 ID:nPhD6zxk.net] >>163 Dim r As Range Dim n As Long Dim i As Long With Range("A1").CurrentRegion With .Offset(1, 0).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible) n = 0 For Each r In .Rows n = n + 1 Next if n = 0 then exit sub end if n = 1以上n以下の乱数 i = 1 For Each r In .Rows If i = n Then rを使ってなにかする Exit Sub End If i = i + 1 Next End With End With
182 名前:デフォルトの名無しさん mailto:sage [2020/05/20(水) 11:23:14.33 ID:qcti6JCq.net] >>173 まず意味が不明 →「変数aが空欄」 よくわかんないけど、 特定の表について、 VBA上で宣言した変数ごとに対応した列をフィルタする簡単なものなら書いてみた。 「空欄」の意味が不明なので、NULLか空文字か、それともセルのことだったのか、 そういうことも質問時に気にするように。 https://i.imgur.com/wNuWmnl.png
183 名前:173 mailto:sage [2020/05/20(水) 12:02:23.38 ID:B3VzH1xh.net] >>175 ありがとうございますm(_ _)m
184 名前:デフォルトの名無しさん mailto:sage [2020/05/20(水) 15:56:33 ID:a9xbkMkn.net] 余談だがグループの中から1人をランダムで選ぶ場合、 同じことを繰り返すと同じ人が選ばれる可能性がでてくる それを無くしたい場合はシャッフルしてから順番に選ぶといい
185 名前:デフォルトの名無しさん [2020/05/20(水) 17:56:09 ID:IoSOKpcA.net] 何かをさせるときに一度リセットする的なアレですね。 プロージャくっつけて作ってる初心者だが何となくその感覚 スマホとPCのデータが両方消えて 前スレで乱数の発生教えてくれた人のコードが見れなくなったが、やべえ
186 名前:デフォルトの名無しさん mailto:sage [2020/05/20(水) 18:10:15.58 ID:bnGR2vkC.net] いや選ばれる人の立場になると、 俺前回やったのにまた俺?他の選ばれてない人はズルくね?みたいな
187 名前:デフォルトの名無しさん [2020/05/20(水) 22:38:53 ID:cJtMR3HM.net] 前スレの教えてくれた恩人のコードやっと見つけたあああああ 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からとかに変えるにはどこ弄ればいいですか? 誰かコメントをこれに添えてもらえませんか… 前スレの大恩人に救われたコードを更に流用したいです
188 名前:デフォルトの名無しさん [2020/05/20(水) 23:01:
] [ここ壊れてます]
189 名前:11 ID:cJtMR3HM.net mailto: 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も変えないとダメですかねこれ 乱数が狂うのかなぁ [] [ここ壊れてます]
190 名前:デフォルトの名無しさん [2020/05/20(水) 23:30:59 ID:c0Xo7Xk6.net] 自分で考えることもしない厚かましい馬鹿は消えろ
191 名前:デフォルトの名無しさん [2020/05/20(水) 23:45:16 ID:cJtMR3HM.net] 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 考えたけどこれかなぁ 他ののまっさらなシートだと乱数再現できた けど反映させたいシートだと乱数が狂う 配置も数値も同じなのに シートの設定かぁ
192 名前:デフォルトの名無しさん mailto:sage [2020/05/20(水) 23:49:11 ID:Khp9j2eL.net] 数千行〜数万行のデータが格納されてるシートで、 ある特定の範囲で最大文字数を取得するには 配列関数で{Max(Len(A1:A10))}とすれば良いですが(VBA上でEvaluateを用いて実装してます)、その最大文字数があるセルの場所(行番号)を特定する方法はありますか? 最大文字数のセルが複数ある場合はその全てのセルの行番号を取得したいです 最終的に、範囲内の最大文字数のセルの背景色を変えたいのが目的です
193 名前:デフォルトの名無しさん mailto:sage [2020/05/21(Thu) 00:19:06 ID:OWznaKXu.net] >>184 セルの文字数がその最大文字数と同じなら色変えるっていう条件付き書式を設定する
194 名前:デフォルトの名無しさん mailto:sage [2020/05/21(Thu) 00:48:50 ID:V79mjqtT.net] >>185 条件付き書式とは盲点でした。 トライしてみます。ありがとう!
195 名前:デフォルトの名無しさん [2020/05/21(木) 01:01:13.95 ID:eV6pHfb6.net] わかった。 けどもう後には引けんほど次元の高い事やらせてて手に負えないわ
196 名前:デフォルトの名無しさん mailto:sage [2020/05/21(木) 03:10:09.62 ID:u8xoMicA.net] 気づくの遅すぎ
197 名前:デフォルトの名無しさん mailto:sage [2020/05/21(Thu) 06:58:06 ID:Qgph+4Ei.net] フォームのラベルに計算結果を表示について。 結果がプラスならそのまま、マイナスなら赤字にマイナス記号を付けるにはどうしたらいいですか? 例 350 -350←赤字
198 名前:デフォルトの名無しさん mailto:sage [2020/05/21(木) 07:11:40.31 ID:uDeLtUtB.net] >>183 セル範囲の内容で乱数の範囲が設定されているからデータが入力されていないと乱数にならないのに、 そこにデータが入力されていると値が更新されない なかなかのジレンマだね 余談だけど、直感的にわかりにくいから、ループカウンタは列と行そのものにした方がいいと思うぞ あと、項目数と基準セルを変えたいなら、それを変数にして、こんな感じ 項目数 = 20 サンプル数 = 25 行0 = Range("C12").Row 列0 = Range("C12").Column For 列 = 列0 To 列0 + 項目数 - 1 ...以降も上記変数で置き換える
199 名前:デフォルトの名無しさん [2020/05/21(Thu) 08:07:12 ID:Sgq4UdRX.net] >>190 ありがとう、全部のコード貰った後に少しずついじる事しかできないレベルだからまた挑戦してみるわ コメントしっかり残して勉強するべしですな
200 名前:デフォルトの名無しさん [2020/05/21(Thu) 12:39:59 ID:VB42BHka.net] >>190 それとこのコード見てさらっとそうやって理解できるってやっぱすごいね 仰るとおり今記入してある数値はそのまま で残りその数値を元に乱数で埋めるというのを 前スレの人が教えてくれた みんな凄いの一言
201 名前:デフォルトの名無しさん [2020/05/21(Thu) 12:46:28 ID:/CAIZx5s.net] 日本語よりはるかに簡単
202 名前:デフォルトの名無しさん mailto:sage [2020/05/21(Thu) 18:17:58 ID:uS9Lfycl.net] パワークエリでデータモデルに読み込んだ後ファイル移動等して元ファイルを参照できない状態からデータをシートに書き出したいのですがvbaで出来ますか? 手動では既存の接続からテーブルとして書き出せるのですがマクロ化するとクエリの更新処理でパスが見つかりませんというエラーになります
203 名前:デフォルトの名無しさん mailto:sage [2020/05/21(木) 20:15:46.18 ID:2OHs6iV3.net] >>189 その文章そのまんま単純に処理に起こすだけでいけるだろ
204 名前:、 [] [ここ壊れてます]
205 名前:デフォルトの名無しさん mailto:sage [2020/05/21(Thu) 20:23:35 ID:L96ERFQO.net] >>194 読込時にテーブルデータを別シートにコピーするようにしとけば?
206 名前:デフォルトの名無しさん mailto:sage [2020/05/21(木) 21:28:40.44 ID:1bkcSVS7.net] >>194 Excel.Currentworkbookで、テーブルの値をパスとして読み込むようにしておいて、ファイル移動したらVBAでそのテーブルの値を書き換えるようにする
207 名前:デフォルトの名無しさん [2020/05/21(Thu) 22:27:29 ID:eV6pHfb6.net] 銀行まるめ型だっけ 仕事で四捨五入多用する俺はあの機能がうざすぎる Format関数使ってるけど素直にRound関数はエクセルと同じ機能にしろよマジで
208 名前:デフォルトの名無しさん mailto:sage [2020/05/21(Thu) 23:25:30 ID:uS9Lfycl.net] >>196 容量がでかいのでどうしても必要なときだけシートに書き出す形にしたいんです >>197 元ファイルは自分のローカルにあって共有フォルダで別の人が使う想定なので
209 名前:デフォルトの名無しさん [2020/05/21(木) 23:51:59.74 ID:g1Bqd7P3.net] ある何かをやりたいときに骨子になるコードが完成するともうそこから手直しが楽しくて止まらないわ
210 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 00:18:17 ID:TbAUFCKp.net] プロパティと引数の使い分けがいまいちわからん クラス内の一つのプロシージャで利用する変数なら引数で渡してよいの?
211 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 03:00:05 ID:qVNfs0Gr.net] 動けばいいんじゃね
212 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 04:52:54.15 ID:HmQhS1LZ.net] プロパティ とりあえず1個ずつセットしといて、処理の開始は後回しにできる 順番を意識しなくていい 引数 複数の変数を参照渡ししたい時、構造体やサブプロパティは微妙にめんどくさい セット忘れが防げそう(願望
213 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 06:38:47 ID:mpVA2e0J.net] >>201 一応定義としては、プロパティはオブジェクトの設定や状態を見たり書いたりするものという事になってる 一度設定したら変えることが殆どない設定はプロパティ、 ちょくちょく変える設定は引数、 みたいな感じでいいと思う
214 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 07:33:08.57 ID:TbAUFCKp.net] >>203 >>204 ありがとう 厳密に使い分けは難しそう 動くけど、他人が読んだら混乱するんだろうなと思いながら書いてる
215 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 11:06:37 ID:y/Lzet5S.net] >>205 色々作ってるとそのうちなんとなくどっちにした方がいいかわかってくると思うよ
216 名前:デフォルトの名無しさん [2020/05/22(金) 13:23:07 ID:DQGXczns.net] 変数ってみんなどんな付け方してんの My〜とかそういう変数付けたりしてるサイトもあれば色々だね
217 名前:デフォルトの名無しさん [2020/05/22(金) 13:55:43 ID:uqJ26gv2.net] 日本語で 「わたしの〜」とかそういう変数名を付けたりしてる。
218 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 18:08:02 ID:FMkBDb3b.net] 拙者も
219 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 18:16:23 ID:CsJitSv2.net] 我(われ) 某(それがし) 拙(せつ) 朕(ちん)
220 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 21:51:59 ID:Cbv5LLjj.net] セルの数式中で条件成立時のみHYPERLINK関数を生成してるのですが、 ?HYPERLINK関数が生成された事を確認 ?リンク切れが無いか確認 する事は可能でしょうか? イメージは下記ですが、数式は複数のパターンがあり困っています =if (A1<>"", HYPERLINK(A1&B1,B1),B1)
221 名前:デフォルトの名無しさん [2020/05/22(金) 23:34:25.54 ID:xc22QBUa.net] 未だに二つのセルの掛け算を電卓で計算してて手入力する50歳のおじさんがいる職場なんだよな
222 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 01:03:15 ID:pi9ABoQN.net] ?HYPERLINK関数が生成された事を確認 -> 隣のセルに If (xxx, 1, 0) とかやっとけばいいんじゃないの ?リンク切れが無いか確認 -> マクロでHTTPリクエストしてステータスコード見ないと駄目だろうね
223 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 04:02:16 ID:TU97qQFp.net] >>205 プロパティは根幹部分を触らせるメンテ用メソッド的な意味合いで用
224 名前:意するといいよ。 例えば「何かを〇倍にする」というメソッドを持つクラスがあったとして、 この「何か」部分が引数で、「〇倍」部分がプロパティ。 利用者はプロパティで「〇倍」を「二倍」等に変えて異なる機能を持つインスタンスを作る事が出来る。 もちろん予め二倍や三倍に設定済みのクラスを作ってもいいんだけど、 プロパティで変更出来るようにすれば一つのクラスで済むという利点がある。 インスタンス化してプロパティを変えたオブジェクトを返す関数(コンストラクタ関数)を作れば凄く便利だよ [] [ここ壊れてます]
225 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 04:04:50 ID:TU97qQFp.net] インスタンス化は new クラス名 でオブジェクトを作ることで、 インスタンスはその作成したオブジェクトのことね
226 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 17:42:06 ID:x2nf7i64.net] ExcelVBAでCSVファイルを2次元配列に格納しようと思い、そこまで作成はできました。 ここを参照しました:ttps://ateitexe.com/excel-vba-csv-to-multi-dimensional-array/ その配列に格納した後、特定の文字列がある行を削除しようと思うと、配列だとかなり手間だと感じました。 (文字列を検索、行を削除、詰める作業が必要) だったら、そもそも配列に入れる前にそのcsvの行を無視しようと思うのですが、どうしてもうまくいきません。 どうしたらいいのでしょうか?
227 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 17:46:18 ID:105ldQbQ.net] 文字列を検索、行を削除、詰める作業をお勧めします
228 名前:デフォルトの名無しさん [2020/05/23(土) 18:20:37 ID:RvKaLrIF.net] >>216 馬鹿過ぎて話しにならない 少しは学んでから出直せ
229 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 18:40:31.27 ID:0VGwJWuY.net] >>216 if(文字列.含んでるよ("RegExp") )then continue; で済む(VBAにはcontinue無いけど概念的には)処理を 「どうしてもうまくいきません」と言ってるわけ?
230 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 18:49:52.27 ID:J+1ULzMv.net] 特定の文字列がある行は空にすればええやん それとも別に空の行も含まれてるんか
231 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 19:27:43 ID:n1v+MUu8.net] >>216 そのどうしてもうまくいかない部分を書けよ…
232 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 19:33:17 ID:P5e4K719.net] 例えば、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"]]
233 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 20:02:14.42 ID:FaM1nYaB.net] 要素数を変えるような操作を配列にする場合、 VBAだと大抵は新しい配列を作るような処理にしたほうが楽 foreachで条件にあえば追加する、そんな感じ
234 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 20:16:37 ID:+RVUJGzG.net] 配列に入れる前にそのcsvの行を無視しようという発想は正しいと思うぞ Splitする前に文字列判定して、無かったときのみ n=n+1 まで実行するようにすればいけるはずだよ それと、ary(n, i) = tmp(i) のところは要注意 csvの列数がRedimの行で設定した数分を越えると、配列の範囲外エラーが起きるので
235 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 21:48:22 ID:GhgCxwTJ.net] B列の2行目から最終行に「2020/5/23」のような文字列が入力されているので この文字列を「2020/5/23」に変換するコードを教えてください
236 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 22:07:45 ID:DEt0hEL0.net] >>225 Sub Sample1() End Sub
237 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 22:09:12 ID:YkB5QRvg.net] >>226 ありがとうございます!
238 名前:225 mailto:sage [2020/05/23(土) 22:38:35 ID:GhgCxwTJ.net] >>226 >>227 すみません。「文字列を日付型」に変換でしたm(__)m
239 名前:デフォルトの名無しさん [2020/05/23(土) 23:15:23 ID:RvKaLrIF.net] >>228 馬鹿は死ねよ どうしてこう次から次へと馬鹿が来るんだ?
240 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 23:49:07 ID:DwihZV3Z.net] 例 数値 1500 期間 2020/05/21〜2023/02/12 この期間のセル数に数値1500の値を 均等割で入れる場合のセル数の計算方法がわかりません。 ※用意してるセルの期間 2020年1月から2022年12月まで。 ※ひと月3分割で1年36マス。 上旬1〜10 中旬11〜20 下旬21〜末 ※2022年を超えた場合はそこまでの均等割を入れそれ以降は入れない。 ※開始期間が2020年1月以前の場合は1月からの均等割を割り振る。 こんな感じの事をしたいんですけど、期間の計算方法の伝授願います。
241 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 23:51:24.02 ID:GhgCxwTJ.net] >>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
242 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 00:33:29.03 ID:jgkofs6w.net] >>230 VBA関係ないただの算数ないか
243 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 05:46:51.68 ID:kGXS6p+T.net] >>229 君がつけ上がってる限り現れるね
244 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 06:12:40 ID:VMYRmKv4.net] 謙虚にしてたらもっとひどかった
245 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 06:15:08 ID:A7TYPIWJ.net] 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
246 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 09:33:40 ID:ozGH/zB/.net] やたらrubyで表したがるやつなんなの? 無意味だし完全にスレチなんだけど
247 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 09:52:14 ID:tKHuSqSe.net] それこのスレの透明人間
248 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 09:56:21 ID:Aun0kaOs.net] 「おれRuby知ってるんだ(どやぁ)」 じゃね?
249 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 11:44:26 ID:0I4G4YZw.net] >>238 え?たかだか一つ言語知ってるだけでどや顔なんて…ありえるかもな。
250 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 15:25:32 ID:ZTIdhNvp.net] >>230 説明がよくわからない。 サンプルを用意するなど、読み手にわかりやすい工夫をすること。 (期間が複数あってよくわからん、期間の基準が上中下旬なのか2023/2/12みたいな細かい日付もあるのか、 「この期間のセル数に」とか、36「マス」とか。 自分で作ったような言葉を、相手はまず理解できないと思うこと。) 最大限理解しようとして作ってみた。 https://i.imgur.com/aYLnniP.png https://i.imgur.com/Edwp9qW.png
251 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 17:31:52 ID:aHD8sbyt.net] >>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 '同じ月
252 名前: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分割)の均等割を出すとき、単純に等分した数値を次々加算していくと誤差が出る可能性があるので、その都度かけ算で計算しなおした方がいいよ [] [ここ壊れてます]
253 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 18:45:45 ID:X8IGI7Pl.net] 均等ではなくなることが分かっているのに均等割というのは一体 均等ではないなら分割の明確なルールと呈示するのが先だろうに
254 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 20:23:46.09 ID:Ij6CWItZ.net] select case iDay case 1 to 10 ’上旬 case 11 to 20 ’中旬 case else '下旬 end select こんなんでいいんじゃねーの
255 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 20:26:51.14 ID:WNKMZrc1.net] 理解ができるのがすげぇよ 俺には文章から何がしたいのか分からん
256 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 20:35:05 ID:CLZ8mfOM.net] me,too
257 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 20:45:14 ID:i+YVCLEB.net] セルに値を手動入力中にVBAから別のセルにアクセスがあるとエラー落ちするんだけど、非同期に処理する方法はないんかね。 VBA側はインターバルタイマーでデータ処理させてて、一方でユーザーはメモ入れたり諸作業したいんだ。
258 名前:デフォルトの名無しさん [2020/05/24(日) 20:46:27 ID:8AgUd6nh.net] vb全然知らないんだけどサクッと教えてほしい Range("C2").AutoFill Destination:=Range("C2:C804"), Type:=xlFillDefault というオートフィル用をするコードがあるとする。 このコードの804部分はいつでも固定値だからセル内の数字を参照するような可変にしたい 一応このコードの前に Volume = Range("J5").Value として数字があるセルから数値をVolumeに得てるんだけど このVolumeを804の部分に当てはめたい どうしたらいい?
259 名前:デフォルトの名無しさん [2020/05/24(日) 21:22:14.11 ID:xjag2nx7.net] >>247 馬鹿は死ねよ
260 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 21:26:46.69 ID:YjTDgAdj.net] >>247 " "は文字列を表す
261 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 21:29:42.85 ID:IJT9Ws79.net] >>247 C2からvolume個の連続データ(volumeは可変)を作りたいんだとしたら .AutoFill Destination:=.Resize(volume) とかどうやろね
262 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 21:35:15.28 ID:IJT9Ws79.net] >>246 セマフォ(いわゆる排他処理)をエクセルでやるのか 実現するのは結構テクニカルになるね 仮にAccessが使えるなら使ったほうがすっきりするかと
263 名前:デフォルトの名無しさん [2020/05/24(日) 21:50:08.32 ID:8AgUd6nh.net] >>250 C2から始める場合はどうしたらいい?
264 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 22:01:27.85 ID:IJT9Ws79.net] volume = Range("j5") With Range("c10") .AutoFill Destination:=.Resize(volume) これでだめ?
265 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 22:42:24 ID:Ij6CWItZ.net] Volume = Range("J5").Value Range("C2").AutoFill Destination:=Range("C2:C" & cCtr(Volume)), Type:=xlFillDefault こういうことじゃね