[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『表示シートの特定の行のみ値に直したい』(のり)
既存のマクロを使って指示を書きましたが
実現できなく、どこが間違いかわからないため
ご助力いただけませんでしょうか。
【行いたいこと】
L列に「入庫」と入っている複数の行のM列からAP列のみ関数を値に変換したいです。
「工場」シートのE2にはその月の日数が入っています
(11月なら「30」=DAY(EOMONTH(B2,0)))
M列からAP列はカレンダーになっていて入庫の行には
その入庫数が関数の数式で数字が入力されております。
(11月ならM列が11/1の入庫数 AP列は11/30の入庫数といった具合です)
Sub 入庫欄を値に()
'
'現在の表示シートのみ、入庫欄を値にする
'
Application.ScreenUpdating = False
aaa = Sheets("工場").Range("E2") - 1
For i = 5 To lastrow
lastrow = Cells(1000, 12).End(xlUp).Row
If Cells(i, 12) = "入庫" Then Range(Cells(i, 13), Cells(i, 13 + aaa)) = Range(Cells(i, 13), Cells(i, 13 + aaa)).Value End If
Next
Application.ScreenUpdating = True
MsgBox "「入庫」欄の値貼り付けが完了しました。"
End Sub
< 使用 Excel:Office365、使用 OS:Windows10 >
lastrow = Cells(1000, 12).End(xlUp).Row は For i = 5 To lastrow より前にしないとlastrowは0です 13 + aaaは aaa = Sheets("工場").Range("E2") + 12 としておけばaaaでよいのでは (どん) 2021/11/21(日) 06:00
どんさんのアドバイスを踏まえて、こんな感じでしょうか。
Sub 入庫欄を値に改() Dim i As Long, aaa As Long Application.ScreenUpdating = False aaa = Sheets("工場").Cells(2, 5).Value For i = 5 To Cells(1000, 12).End(xlUp).Row If Cells(i, 12).Value = "入庫" Then With Cells(i, 13).Resize(, aaa) .Value = .Value End With End If Next Application.ScreenUpdating = True MsgBox "「入庫」欄の値貼り付けが完了しました。" End Sub
※EOMONTHは別シートでした。該当部修正しました。07:07 (まるごとバナナ) 2021/11/21(日) 06:48
Sub ゼロを消す()
Dim i As Long, aaa As Long Application.ScreenUpdating = False aaa = Sheets("工場").Cells(2, 5).Value For i = 5 To Cells(1000, 12).End(xlUp).Row If Cells(i, 12).Value = "入庫" And Value = 0 Then With Cells(i, 13).Resize(, aaa) .Value = "" End With End If Next Application.ScreenUpdating = True MsgBox "完了" End Sub (のり) 2021/11/22(月) 15:08
なんでもマクロでやらなくても、エクセルにはいろいろな機能が搭載されています。
例1)Excelのオプションの詳細設定から「次のシートで作業するときの表示設定」グループにある、 「ゼロ値のセルにゼロを表示する」のチェックを外してみる。 例2)該当範囲(提示例なら1日から月末までの範囲)のセルの書式設定をユーザー定義で「#,###」としてみる。 例3)値貼付する前の数式の段階でゼロを表示しないようにしておく。IF(計算式=0,"",計算式)等
そうではなくて、「10500」を「15」にしたいとかでしょうか? (まるごとバナナ) 2021/11/22(月) 19:18
>Value = 0
Value が変数宣言してない型の決まってない(variant型)ただの変数。 variant型の初期値空白にもなるし、0にもなるから成立。
MsgBox Value = "" MsgBox Value = 0
ってやればわかる。 見よう見まねで無く、With について少しは勉強してください。 (にくちゃんねる) 2021/11/22(月) 19:53
ひまじんさん、にくちゃんねるさん もう少し勉強して出直してこようと思います。
まるごとバナナさん 例2で解決できそうです。
(のり) 2021/11/23(火) 05:00
解決できそうで何よりです。 VBAに囚われず、Excelの機能を活用する事であっさり解決する場合もあります。 ご利用のバージョンがOffice365ということですので、是非ご活用下さい。(羨ましい。。。)
ネット上にはVBAの解説サイトがたくさんありますので 基本的な知識だけでも習得しておくと、コードを改変する場合も捗ると思います。 第一歩として「変数の宣言を強制する」をWeb検索してみてください。 以下、よろしければご参考に。
Sub 入庫欄を値にした後ゼロ値消去() Dim i As Long, aaa As Long Application.ScreenUpdating = False aaa = Sheets("工場").Cells(2, 5).Value For i = 5 To Cells(1000, 12).End(xlUp).Row If Cells(i, 12).Value = "入庫" Then With Cells(i, 13).Resize(, aaa) .Value = .Value .Replace What:=0, Replacement:="", LookAt:=xlWhole End With End If Next Application.ScreenUpdating = True MsgBox "「入庫」欄の値貼り付けが完了しました。" End Sub (まるごとバナナ) 2021/11/23(火) 06:23
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.