Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


90 / 3841 ページ ←次へ | 前へ→

【80670】Re:セルから日付を取得して、その日から...
発言  マナ  - 19/4/1(月) 14:15 -

引用なし
パスワード
   ▼ぐら さん:
-
>
>Date - 2を該当セルの日-2にすれば良いと思うのですが、思い当たる関数を入れてもエラーしか起きません。
>たとえば、先にセルから日付を取得しておいて、その値をDate-2のところに入れるとValue <が成り立つというふうにはできるのでしょうか?


Dim 最終セル As Range

Set 最終セル = Range("A65536").End(xlUp)

こんな感じで、変数を使えば、
Date-2 のかわりに、最終セル.Value-2とできます。
・ツリー全体表示

【80669】セルから日付を取得して、その日から2日...
質問  ぐら  - 19/4/1(月) 7:16 -

引用なし
パスワード
   はじめまして。
仕事でマクロを使うことになり、勉強しながら組んでみたのですが躓いてしまいました。
A列の最終行のセルを読み取り、そのセルが今日より3日以前を非表示にするマクロを組んだのですが、
要望によりそのセルの日付より3日以前を非表示にできないかということになりました。
作業日にかかわらず2日前を消したいとのことです。


Sub Meas()
'
' Meas Macro
'

'  
  Dim i As Integer
  
  For i = 5 To Range("A65536").End(xlUp).Row
  If Range("A" & i).Value < Date - 2 Then
  Rows(i & ":" & i).EntireRow.Hidden = True
  End If
  
  Next i


Date - 2を該当セルの日-2にすれば良いと思うのですが、思い当たる関数を入れてもエラーしか起きません。
たとえば、先にセルから日付を取得しておいて、その値をDate-2のところに入れるとValue <が成り立つというふうにはできるのでしょうか?
・ツリー全体表示

【80668】Re:条件に合った場合だけ、その行を非表...
発言  γ  - 19/3/31(日) 17:55 -

引用なし
パスワード
   マナさんの発言を見ずに投稿してしまいました。
両方トライするとよいと思います。
たしかに、最短距離はオートフィルタですね。
・ツリー全体表示

【80667】Re:条件に合った場合だけ、その行を非表...
発言  γ  - 19/3/31(日) 17:52 -

引用なし
パスワード
   >if or thenを上手く使えばいけそうですが・・。
そのとおりです。

(1)非表示にする動作をマクロ記録すれば、非表示にする部分は得られます。
(2)比較するところはそのままですよ。
(3)最終行を求めるのは Cellls(Rows.Count,1).End(xlUp).Row です。
  あとは2行目から最終行までの繰り返しのことろも難しくはないです。
ご自分でトライすることが一番力をつける道です。
「いけそう」で止まっていたらもったいないです。
トライしてみて下さい。
詰まったところがあれば、具体的に質問して下さい。
・ツリー全体表示

【80666】Re:条件に合った場合だけ、その行を非表...
発言  マナ  - 19/3/31(日) 17:37 -

引用なし
パスワード
   ▼ビギナー さん:

手作業では、オートフィルタが簡単です。
それをマクロにすることも可能です。
・ツリー全体表示

【80665】条件に合った場合だけ、その行を非表示に...
質問  ビギナー  - 19/3/31(日) 17:26 -

引用なし
パスワード
   セルA1に「品名」、B1に「値段」、C1に「セール予定」と入力されている。

A2、A3、A4・・・と延々と商品名が記載されている。
B2、B3、B4・・・と所々に「高い」と入力されている。
C2、C3、C4・・・と所々に「あり」と入力されている。

※A列の商品数は増減があるので、範囲は不定になります。それに伴い、B列、C列も不定になります。

もし、A列の商品名おいて、隣接するB列が「高い」もしくはC列が「あり」だったら、
その行を非表示にするにはどういうコードを書けば良いでしょうか?
if or thenを上手く使えばいけそうですが・・。

例1:A123「バッグ」 B123「高い」 C123(未記入)だったら、その行を非表示にする。

例2:A64「スカーフ」 B64(未記入)C64「あり」だったら、その行は非表示にする。

拙い説明で申し訳ありません、ご教授よろしくお願いします。
・ツリー全体表示

【80664】Re:マクロのコピーペストがうまく行かない
お礼  モリチャン  - 19/3/29(金) 23:37 -

引用なし
パスワード
   すみません。期末までにマクロ作れと言うことで、マクロ作成していました。現在までバグが治っていないので、採用しないと言うことになりました。アドバイス有難うございました。
・ツリー全体表示

【80663】Re:WORKDAY関数をVBAで使用したい
発言  みも  - 19/3/29(金) 21:15 -

引用なし
パスワード
   ▼マナ さん:
>エラーは文字列だからですね。
>
>IsDateで調べてTrueなら、
>CDateまたはDateValueを使うとよいです。
>そうすれば、エラーはでないと思います。
>
>J1の書式を標準にしておけばよいだけかもしれませんが…

ご回答ありがとうございます。

アドバイス頂いた点を踏まえて、実行してみます!
今はデータがないので、月曜日に実験してまたご報告、ご相談させて頂きます。

よろしくお願い致します。
・ツリー全体表示

【80662】Re:WORKDAY関数をVBAで使用したい
発言  マナ  - 19/3/29(金) 20:07 -

引用なし
パスワード
   ▼みも さん:

>このマクロを実行すると、6月生産の場合、セルは文字列の2019/5/20という結果になります。

エラーは文字列だからですね。

IsDateで調べてTrueなら、
CDateまたはDateValueを使うとよいです。
そうすれば、エラーはでないと思います。

J1の書式を標準にしておけばよいだけかもしれませんが…
・ツリー全体表示

【80661】Re:UserFormによる編集について
発言  マナ  - 19/3/29(金) 19:59 -

引用なし
パスワード
   ▼tarutaru さん:

ユーザーフォームではなく
編集用のシートを用意してはどうでしょうか。
シートなら、10行ずつ抽出も関数で簡単にできませんか。
編集後、sheet1に戻すマクロも簡単ですよね。
・ツリー全体表示

【80659】Re:WORKDAY関数をVBAで使用したい
発言  みも  - 19/3/29(金) 19:24 -

引用なし
パスワード
   ▼マナ さん:

>>“日付になっております” と表示されます。
>
>セル書式が文字列になっていませんか

ご回答ありがとうございます。

文字列になっております。
ただ、文字列ではなく、日付に変更してもエラーはでます。

後出しで申し訳ありませんが、このコードの前に違うコードを書いております。

内容は、元データの○月生産という項目の数字だけを読み取り、その数字−1の数値&”/20”を横のセルに入力するというものです。
このマクロを実行すると、6月生産の場合、セルは文字列の2019/5/20という結果になります。

つまり生産月の前月○日に手配する為の納期をだしております。

この納期の出し方が悪いでしょうか。
この入力を”生産月の数字−1の数値&”/20””以外の書き方に変えた方がいいでしょうか。

ファイルのあるパソコンからはすでに離れており、データを持ち出していない為、実際のコードが入力できなくて申し訳ありません。

よろしくお願い致します。
・ツリー全体表示

【80658】Re:UserFormによる編集について
質問  tarutaru  - 19/3/29(金) 4:18 -

引用なし
パスワード
   マナ様

今回もよろしくお願いいたします。

Jaka様

アドバイスありがとうございます。

すいません。説明が不足しておりました。

今作成しているものは、UserFormを2つ用意しており、UserForm1を入力用、UserForm2を編集用としています。

入力用は問題なくSheet1(データ表)に転記できており、そのSheet1上に以前マナ様からアドバイス頂いたフィルタオプションを用意し、データが抽出できるようにしてあります。

その抽出されたSheet1上のデータを、編集用(UserForm2)に反映したいのですが、反映の仕方というのが、例えば、抽出されたデータが10件(行)あるとすれば、まず先頭行の1件目が編集用(UserForm2)を起動した時に表示され、その編集用に用意した「前へボタン」と「次へボタン」で10件(行)分のデータが編集用(UserForm2)に表示され、各Boxの内容を変更し決定すると、Sheet1(データ表)に転記されるようにしたいと思っています。

また、1件目のデータが編集用(UserForm2)に表示された場合、「前へボタン」がFalseになるようにしたいとも思っています。

Jaka様からアドバイス頂いた「Textbox1.ControlSource="Sheet1!A1"」を試したのですが、上手くいきませんでした。

今回もお手数をおかけしますが、よろしくお願いいたします。
・ツリー全体表示

【80657】Re:UserFormによる編集について
発言  Jaka  - 19/3/28(木) 23:05 -

引用なし
パスワード
   前とか次とかはよく解らないけど、

ControlSource をいじってやれば、
セルの内容がテキストボックスに反映されます。
セルの内容を変えれば、すぐテキストボックスに反映。
テキストボックスの内容を変えれば、すぐにセルに反映。

Textbox1.ControlSource="Sheet1!A1"
・ツリー全体表示

【80656】Re:UserFormによる編集について
発言  マナ  - 19/3/28(木) 21:46 -

引用なし
パスワード
   ▼tarutaru さん:

念のため、確認ですが
「フォーム」という機能があるのですが
これでは、不十分ということでしょうか。
・ツリー全体表示

【80655】UserFormによる編集について
質問  tarutaru  - 19/3/28(木) 21:14 -

引用なし
パスワード
   すいません。
またお世話になります。

編集用userformを作成しました。

内容は、sheet1に入力されているデータを、編集用UserFormの各Boxに呼び出して、文字や数値を変更するとその内容がSheet1に反映されるといったものです。

Sheet1には「検索ボタン」を配置しており、条件入力後、押すことで該当データが抽出され、抽出されたデータのみを編集用UserFormに表示されるようにしたいと思います。

検索条件(絞込み)によっては複数の該当データが抽出(sheet1に表示)されることになりますが、その場合、編集用UserFormに「前ボタン」、「次ボタン」を配置することで移動できるようにしたいと思っています。

sheet1(データ)
Range("B3").Value = 氏 名
Range("C3").Value = 住 所
Range("D3").Value = 生年月日
Range("E3").Value = 職 業

編集用UserForm
TextBox1 = 氏 名
TextBox2 = 住 所
TextBox3 = 生年月日
ComboBox1= 職 業  

sheet1に、「編集ボタン」を配置、編集用UserFormが立ち上がるようにしています。

また、編集用UserFormに「前ボタン」、「次ボタン」も配置したのですが、移動については

Private Sub 次ボタン_Click()
 
  行 = 行 + 1
 
 Worksheets("sheet1").Activate
 Worksheets("sheet1").Cells(行, 2).Select
 
 If 行 >= 1000 Then(入力データを1000までとした場合)
  Me.次ボタン.Enabled = False
 Else
  Me.前ボタン.Enabled = True
  Me.次ボタン.Enabled = True
 End If
  
End Sub

Private Sub 前ボタン_Click()

  行 = 行 - 1
 
 Worksheets("sheet1").Activate
 Worksheets("sheet1").Cells(行, 2).Select
 
 If 行 <= 3 Then
  Me.前ボタン.Enabled = False
 Else
  Me.前ボタン.Enabled = True
  Me.次ボタン.Enabled = True
 End If
    
End Sub

このような構文でよろしいのでしょうか?

よろしくお願いいたします。
・ツリー全体表示

【80654】Re:WORKDAY関数をVBAで使用したい
発言  マナ  - 19/3/28(木) 18:13 -

引用なし
パスワード
   ▼みも さん:

>“日付になっております” と表示されます。

セル書式が文字列になっていませんか
・ツリー全体表示

【80653】Re:WORKDAY関数をVBAで使用したい
質問  みも  - 19/3/28(木) 12:09 -

引用なし
パスワード
   ▼マナ さん:

>
>>WORKDAY関数をVBAで使用したいのですが、エラーが出てしまいます。
>
>J1セルに日付が入力されているか確認するコードを追加してはどうでしょうか。


ご回答誠にありがとうございます。

下記コードをWorksheetFunction.WorkDayの前に追加してみましたが、

“日付になっております” と表示されます。

IfIsDate(DATA.Cells(1,10).Value)=FalseThen

DATA.Cells(1,10).Value=CDate(DATA.Cells(1,10))

Else

MsgBox"日付になっております。"

EndIf

お手数ですがご確認よろしくお願い致します。
・ツリー全体表示

【80652】Re:WORKDAY関数をVBAで使用したい
発言  マナ  - 19/3/27(水) 18:50 -

引用なし
パスワード
   ▼みも さん:

>WORKDAY関数をVBAで使用したいのですが、エラーが出てしまいます。

J1セルに日付が入力されているか確認するコードを追加してはどうでしょうか。
・ツリー全体表示

【80651】WORKDAY関数をVBAで使用したい
質問  みも  - 19/3/27(水) 18:28 -

引用なし
パスワード
   WORKDAY関数をVBAで使用したいのですが、エラーが出てしまいます。

エラー内容: “Worksheetfunction クラスの workdayプロパティを取得できません。”

やりたい事: 入力してある日付が土日祝日であった場合に、一番近い平日の数字を別のセルに入力する(前倒し)

手順シートには予め祝日を記載しています(S列)

コード:

Dim TEJYUN As Worksheet

Set TEJYUN = Worksheets("手順書")

Dim DATA As Worksheet

Set DATA = Worksheets("データ")


DATA.Cells(1, 11) = WorksheetFunction.WorkDay(DATA.Cells(1, 10)+1, -1, TEJYUN.Range("S1:S100"))

初心者ですので、根本的なところが間違っているかもしれませんが、ご教授頂けますと幸いです。

よろしくお願いいたします。
・ツリー全体表示

【80650】Re:変数の参照が不正ですを直したい
お礼  モリチャン  - 19/3/26(火) 22:23 -

引用なし
パスワード
   ▼モリチャン さん:
>以下の様なマクロ部分のプログラムです。他にフォーム部分がありますが動かすとコンパイルエラ:Nextで指定された変数の参照が不正ですと表示します。そして、Next iのiの部分が強調されますので、変数i関係が違うと思いますがどう直したらよいでしょうか?
>Sub main()
>Application.ScreenUpdating = False
>Workbooks.Open Filename:=gfilename
>sinn = ActiveWorkbook.Name
>Sheets("規格値").Select
>Range("E10").Select
>ActiveCell.Offset(0, 0).Range(Cells(2, 1), Cells(15, 7)).Select
>Selection.ClearContents
>Workbooks.Open Filename:=dfilename
>For i = 1 To 7
>For k = 1 To 14
>Data = ActiveWorkbook.Name
>Windows(sinn).Activate
>Range("E10").Select
>ActiveCell.Offset(k - 1, i - 1).Select
>Windows(Data).Activate
>D = Val(Mid(TESTNO, (k - 1) * 2 + 1, 2))
>Range(Cells(D, 1), Cells(D, 6)).Copy
>Windows(sinn).Activate
>Selection.PasteSpecial Paste:=xlFormula
>Next i
>Windows(Data).Activate
>ActiveWindow.Close
>If i = 7 Then Exit For
>Application.ScreenUpdating = True
>MsgBox ("終了しました")
>End Sub


以上の記載は、EXCELファイルの試験条件規格を、&#128201;ファイルに転送する目的で作ったのですが、ロジックが未熟で、3月25日分がある程度完成したファイルなので
閉じさせていただきます。ご回答ありがとうございました。
・ツリー全体表示

90 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free