[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 07/02 04:32 / Filesize : 267 KB / Number-of Response : 1038
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA 質問スレ Part66



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/

※デフォルト設定

162 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 19:19:11 ID:qQEEjoZO.net]
10万円給付の紐付けなんかVBAで余裕に出来るのに話題にならないのが不思議

163 名前:デフォルトの名無しさん [2020/05/19(火) 19:48:13 ID:NEFcECdd.net]
>>156
こういう馬鹿が職場にいて余計混乱させているだけだろ

164 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 20:27:14.48 ID:F1sOO54s.net]
そのうち消えた10万円とかなるんじゃね

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が使えるなら使ったほうがすっきりするかと






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<267KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef