Excel VBA質問箱 IV

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

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


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

【81110】Re:オートフィルで日付の逆順
お礼  ビギナー  - 19/11/2(土) 11:20 -

引用なし
パスワード
   返事ありがとうございます。早速試してみます。
・ツリー全体表示

【81109】Re:オートフィルで日付の逆順
発言  マナ  - 19/11/1(金) 22:12 -

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

連続データの作成を「マクロの記録」してみました。

  Range("A1").Select
  ActiveCell.FormulaR1C1 = "11/1/2019"
  Range("A1:A10").Select
  Selection.DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:= _
    xlDay, Step:=-1, Trend:=False
・ツリー全体表示

【81108】オートフィルで日付の逆順
質問  ビギナー  - 19/11/1(金) 21:36 -

引用なし
パスワード
   こんばんは。質問の内容ですが
a1に2019/11/1と入力し、a2〜a10のセルに、
2019/10/31、2019/10/30、2019/10/29・・・
となるようにしたいのですが、どうすればいいでしょうか?
色々調べてみたのですが、逆順のやり方を見つけることはできませんでした。
vbaでは不可能でしょうか?
・ツリー全体表示

【81107】Re:行の非表示
発言  マナ  - 19/11/1(金) 7:43 -

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

オートフィルタで可能です。
・ツリー全体表示

【81106】行の非表示
質問  yuji  - 19/11/1(金) 6:56 -

引用なし
パスワード
   VBAまったくの初心者です。
これから少しずつ勉強していこうと思います。

早速ですが、
データの中に「発送待ち」という列があり、全データ中発送待ちだけを表示したり全データを表示したりということをしたいと思ってます。

例えば、
   A   B
1 あああ 発送待ち    
2 いいい     
3 ううう 発送待ち
4 えええ 発送待ち
5 おおお

このようなデータがあった場合、何かをすると
   A   B
1 あああ 発送待ち    
3 ううう 発送待ち
4 えええ 発送待ち

と表示させ、また何かをすると全行表示に戻すというようなことをしたいのです。
これを同じシートで表示、非表示としたいのです(別シートに発送待ちだけを抽出なら関数を駆使して作れます)。

この「何か」という方法すらわからないのですが、そもそもVBAでならこんなことできますか?
もしできるなら、その方法をご教示ください。

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

【81105】Re:起動済みIEを操作
回答  とおりすがり  - 19/10/30(水) 5:22 -

引用なし
パスワード
   もう見てないかもしれないですが。

原因は「If DocumentTitle = "" Then」のところで、DocumentTitleを空白にしているために、
IEを判別できていないのだと思います。

取得しているシェルのうち、IEではないものは基本的にdocument.titleを持っていない=DocumentTitleが空白になります。
その結果、IEでないものが「If DocumentTitle = "" Then」の条件に一致してしまっている状態です。
(説明下手ですね。ごめんなさい。)

操作したいページのTitleタグの部分を指定すればいいんだと思いますが、
もしかしたらそのページはTitleタグの部分が空白になっているということですかね。

だとしたら、別のアプローチですが、下記ではどうでしょうか。
(もしたくさんタブを開いている状態だとしたら、タブを判別するためにもう一工夫必要かもしれません)

Sub test()

  Dim ie As InternetExplorer
  Dim sh As Object
  Dim win As Object
  Dim DocumentTitle As String

Set sh = CreateObject("Shell.Application")

  For Each win In sh.Windows
    If TypeName(win.document) = "HTMLDocument" Then
      Set ie = win
      Exit For
    End If
  Next
  
  ie.document.getElementsByTagName("TITLE")(0).innerText = ""

End Sub
・ツリー全体表示

【81104】Re:形式を選択して貼り付ける
お礼  たかぴー  - 19/10/26(土) 23:48 -

引用なし
パスワード
   マナさんご教授ありがとうございます

他のサイトで解決しました。

報告が遅くなり、大変失礼しました。

今後ともよろしくお願いします。
・ツリー全体表示

【81103】Re:形式を選択して貼り付ける
発言  マナ  - 19/10/26(土) 11:06 -

引用なし
パスワード
   ▼たかぴー さん:

ht tp://www.vbalab.sakura.ne.jp/bbspolicy.html

マルチポストについて
別のサイト(掲示板)にまったく同じ目的の投稿をすることを、一般に「マルチポスト」といいます。当質問箱では、マルチポストは原則認めています。つまり、ほかのサイトで質問したことをこのサイトで質問してもかまわないということです。

しかし、もしマルチポストをするのなら、可能な限り「○○にも同じ質問を出しました」ということを宣言してください。そして、仮に他のサイトで解決したのなら、ここにも必ずその顛末を書いてください。質問しっぱなし、というのはモラルに反します。「解決したからいいや」というのではありません。

また、マルチポストを明示的に禁止しているサイトとのマルチポストをしてはいけません。
・ツリー全体表示

【81102】形式を選択して貼り付ける
発言  たかぴー  - 19/10/26(土) 10:09 -

引用なし
パスワード
   下記のマクロでシート(内貨)の最終行に値の書式を選択して貼り付けをしたいのですが、どのようにすればよいでしょうか?


Sub MACRO5255()
Dim 最終行 As Long
Dim I As Long
For I = 1 To 50
最終行= Sheets("内貨").Range("A1").CurrentRegion.Rows.Count
If Range("B" & I + 2).Value <> "" Then
Range("B" & I + 2).Resize(1, 6).Copy Sheets("内貨").Range("D" & 最終行 + 1)
End If
If Range("A" & I + 2).Value <> "" Then
Range("A" & I + 2).Copy Sheets("内貨").Range("B" 最終行 + 1)

End If
End Sub
・ツリー全体表示

【81101】Re:適用範囲
発言  γ  - 19/10/19(土) 22:23 -

引用なし
パスワード
   出来上がったようで何よりです。

インデントをしっかりつけることをお薦めします。

Sub fmcdtn()
  Dim fc As FormatCondition
  Dim gyou As Long
  Dim retu As Long
  Dim rng As Range

  For i = 1 To Sheets.Count
    Sheets(Sheets(i).Name).Activate
    gyou = Cells(Rows.Count, 3).End(xlUp).Row
    retu = Cells(1, Columns.Count).End(xlToLeft).Column
    ActiveSheet.Cells.FormatConditions.Delete
    Range("A1").Activate
    Set rng = Range(Sheets(i).Cells(1, 1), Sheets(i).Cells(gyou, retu))
    Set fc = rng.FormatConditions. _
         Add(xlExpression, , "=COUNTIF(祝日データ,A$1)=1")
    fc.Interior.Color = RGB(204, 255, 255)
    gyou = 0
    retu = 0
  Next
End Sub

少し手を入れるとすると、こんな感じでしょうか。
できるだけ、シートやセルをSelectしないほうがよいかと思います。

Sub fmcdtn2()
  Dim fc As FormatCondition
  Dim gyou As Long
  Dim retu As Long
  Dim rng As Range

  For i = 1 To Worksheets.Count
    With Worksheets(i)
      gyou = .Cells(.Rows.Count, 3).End(xlUp).Row
      retu = .Cells(1, .Columns.Count).End(xlToLeft).Column
      .Cells.FormatConditions.Delete
      
      Set rng = .Range(.Cells(1, 1), .Cells(gyou, retu))
      Set fc = rng.FormatConditions. _
           Add(xlExpression, , "=COUNTIF(祝日データ,A$1)=1")
      fc.Interior.Color = RGB(204, 255, 255)
    End With
  Next
End Sub
・ツリー全体表示

【81100】Re:適用範囲
お礼  T-K  - 19/10/19(土) 19:37 -

引用なし
パスワード
   教えていただいた通り作り直したら希望通り
の処理ができました本当にありがとうございました。
一応できたものを下に記入します


Sub fmcdtn()


Dim fc As FormatCondition
Dim gyou As Long
Dim retu As Long
Dim rng As Range


For i = 1 To Sheets.Count

Sheets(Sheets(i).Name).Activate


gyou = Cells(Rows.Count, 3).End(xlUp).Row
retu = Cells(1, Columns.Count).End(xlToLeft).Column


    ActiveSheet.Cells.FormatConditions.Delete
   
   
    Range("A1").Activate


Set rng = Range(Sheets(i).Cells(1, 1), Sheets(i).Cells(gyou, retu))

   Set fc = rng.FormatConditions. _
   Add(xlExpression, , "=COUNTIF(祝日データ,A$1)=1")
 fc.Interior.Color = RGB(204, 255, 255) 
 
gyou = 0
retu = 0


  Next


End Sub
・ツリー全体表示

【81099】Re:適用範囲
発言  γ  - 19/10/18(金) 17:18 -

引用なし
パスワード
   だいぶ前進しましたね。
気になるのは、特定した行番号、列番号が、
すべてのシートで同じという前提になってしまっている点でしょうか。
行、列を求めるコードを、繰り返しの中でシート毎に実行したらどうでしょう。
・ツリー全体表示

【81098】Re:適用範囲
質問  T-K  - 19/10/18(金) 1:02 -

引用なし
パスワード
   A列には商品 B列C列には商品を作るための工程 E列2行目以降には、日付が記入されていますD3以降は受注情報在庫情報になります加工情報になります
途中空白があるためcuurent.RegionはダメでしたUsedRangeがいいのかEndで
処理したほうがいいのか、試行錯誤してますが、うまくいきません
現状の状態を下記に記しましたのでどこを訂正したほうがいいのか
おしえてください
*C列の最終行は空白でないため行数処理で使用しています
2行目は日付が入力されているため列数処理に使用しました
Sub fmcdtn()

Dim sh As Worksheet
Dim fc As FormatCondition
Dim gyou As Integer
Dim retu As Integer


gyou = Cells(Rows.Count, 3).End(xlUp).Row
retu = Cells(2, Columns.Count).End(xlToLeft).Column


 For Each sh In Sheets

  sh.Cells.FormatConditions.Delete


   Set fc = sh.Range(sh.Cells(1, 1), sh.Cells(gyou, retu)).FormatConditions. _
   Add(xlExpression, , "=COUNTIF(祝日データ,A$2)=1")
 fc.Interior.Color = RGB(204, 255, 255)
 
 
Next

End Sub
・ツリー全体表示

【81097】起動済みIEを操作
質問  けんじ  - 19/10/17(木) 18:14 -

引用なし
パスワード
   IEで起動済みの画面にエクセルの特定のセルの値を反省させたいです。
下記、ネットから参考にしたのですが
最後のie.document〜のところで
オブジェクト変数またはwithブロック変数が設定されていません。と出ました。
原因分かりますでしょうか?

Sub test()
  Dim ie As InternetExplorer
  Dim sh As Object
  Dim win As Object
  Dim DocumentTitle As String
  
  Set sh = CreateObject("Shell.Application")
  
  For Each win In sh.Windows
    DocumentTitle = ""
    On Error Resume Next
    DocumentTitle = win.document.title
    On Error GoTo 0
    If DocumentTitle = "" Then
      Set ie = win
      Exit For
    End If
  Next
  
  ie.document.getElementsByTagName("TITLE")(0).innerText = ""

End Sub
・ツリー全体表示

【81096】Re:適用範囲
発言  γ  - 19/10/17(木) 9:31 -

引用なし
パスワード
   適用範囲の特徴は無いのですか?
・特定の文字列が左上に書いてある場所から始まるとか
・CurrentRegionとOffset、InterSect等で割り出すことができるとか
そうしたことを検討してみてください。
そうした特徴を示してもらえばなんとかなるかも。

自分で見当がつかないことを、そのファイルを見たこともない、
何も情報を持っていない人に相談されても、
こうすべきだなどと即答できるわけがないですよ。
・ツリー全体表示

【81095】適用範囲
質問  T-K  - 19/10/17(木) 1:13 -

引用なし
パスワード
   windows10
EXCEL 2016

休日を条件付き書式で色付けしたいのですが、
シート数も多く、表の大きさも違うため、シートごとの設定が大変です。
VBAを作成しましたが、適用範囲設定で分からず
こまっています。
どなたかわかる方いらしたらおしえてください。


Sub fmcdtn()

Dim sh As Worksheet
Dim fc As FormatCondition


For Each sh In Sheets
  sh.Cells.FormatConditions.Delete


   Set fc = sh.Cells.FormatConditions. _
   Add(xlExpression, , "=COUNTIF(祝日データ,A$2)=1")
 fc.Interior.Color = RGB(204, 255, 255)
 
 Next
 

End Sub
・ツリー全体表示

【81094】Re:標準モジュールで複写元のシートモジ...
発言  マナ  - 19/10/15(火) 19:36 -

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

だから、シートコピーするのではなく

1)新規シート追加
2)全セルをコピー貼り付け

これなら、初心者でもわかるコードで同じ結果を実現できませんか?
・ツリー全体表示

【81093】Re:標準モジュールで複写元のシートモジ...
お礼  うしろ E-MAIL  - 19/10/15(火) 12:13 -

引用なし
パスワード
   マナさんへ
ご指導ありがとうございます。
VBA初心者んなので誤ったソフトの使い方なのかもしれません。
ご想像のとおりインベントマクロが記載してあります。
標準モジュールにコードを書いて全ての値が入力されてから実行ボタンを
押すようにすれば良いかもしれませんね。
利用期間が長引いた場合を想定してこのような質問をさせていただきました。
ありがとうございました。
・ツリー全体表示

【81092】Re:標準モジュールで複写元のシートモジ...
お礼  うしろ E-MAIL  - 19/10/15(火) 12:04 -

引用なし
パスワード
   ▼γ さん:
ご指導ありがとうございます。
工事現場で基本的に毎日入力するもので利用しています。
また、私だけが利用するのであれば、コードの削除は大した作業ではありません。
本来なら、ワークブックを別に管理してして標準フォーマットより必要情報を入力して別ファイルとして保存するのが良いのかもしれません。
入力する方が休日も毎日入力してくれれば、ファイル(ファイル名に少し工夫がいりますが…)が簡単に管理ができ、一つ前の工程情報を読み込み現在のファイルに反映しやすいですね。
しかし、台風や工事の進捗状況により入力しない場合も考えられるため、ファイル名の管理が複雑になり、今の私の能力では無理でした。
ワークシートモジュールのコードは数十行なので大した容量増にはならないのですが工事期間が長くなることを想定し今回の質問をさせていただきました。
VBEは依然少し勉強しましたが、敷居が高そうなのでシートモジュールはそのままにしようと思います。
ありがとうございました。
・ツリー全体表示

【81091】Re:標準モジュールで複写元のシートモジ...
発言  γ  - 19/10/14(月) 21:27 -

引用なし
パスワード
   (1)イベントプロシージャであるとしても、本体を標準モジュールにおいて
  イベントプロシージャから標準モジュールのプロシージャをコールするようにすれば、
  シートモジュールの大きさは節約できます。
(2)シートモジュールのコードを手で消しても、さほど負荷にならないと思うが、
  どうしてもということなら、コードそのものを触ることができます。
  しかし、こうしたことは悪用される懸念があり、余り推奨されません。
  (少なくとも、他人に聞かないと作れないようなら、手作業を薦めます。)
 
  どうしても^2 ということなら、
  「VBAでVBEを操作する」
  ht tp://officetanaka.net/excel/vba/vbe/
  の記事を参照して自作してください。
  ・ワークシート名からobject名を得るには、Worksheets("消したいシート").CodeName
  ・コードの行数は CountOfLinesプロパティ
  ・コードの消去はDeleteLinesメソッド。開始行と消去する行数を指定。
・ツリー全体表示

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