Excel VBA質問箱 IV

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

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


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

【77758】Re:EXCEL2007で正常なのが2013では動かな...
発言  β  - 15/12/18(金) 17:32 -

引用なし
パスワード
   ▼独身VBA さん:

不思議ですねぇ。
こちらでユーザーフォームを表示してコマンドボタンでシート作成。
またユーザーフォームを表示してコマンドボタンでシート作成。

何度やっても、アクティブになっている、今作られたばかりのシートに入力ができます。
・ツリー全体表示

【77757】Re:EXCEL2007で正常なのが2013では動かな...
お礼  [名前なし]  - 15/12/18(金) 17:06 -

引用なし
パスワード
   ▼β さん:
>▼独身VBA さん:
>
>>エクセル2007で作り正常に作動していたのですが、2013で動かすと、新しく作ったシートに文字が打ち込めません。ほかのシートに移動させて再度、新しくできたシートに戻すと打ち込めます。
>
>文章の意味がいまいちわからないのですが、Win8.1+xl2013 で提示のコードを動かしてみました。
>問題なくシートが追加され書きこまれます。
>出来上がったシートへの手作業入力も、もちろんできています。
>
>具体的にはどんな不具合なんでしょうか?

βさん:
お返事ありがとうございます。
新しく出来上がったシートがActivate状態になっているのですが、文字を打ち込むとその前に作ったシートの方に入力されてしまいます。他のシートにクリックして新しく作ったシートをクリックして文字を打ち込むと、きちんと入力できるんです。
元のシートは保護はかかっていません。
・ツリー全体表示

【77756】Re:EXCEL2007で正常なのが2013では動かな...
発言  β  - 15/12/18(金) 7:31 -

引用なし
パスワード
   ▼独身VBA さん:

もしかして・・・
コピー元の FAX送信書 シート、保護がかかっていませんか?
・ツリー全体表示

【77755】Re:EXCEL2007で正常なのが2013では動かな...
発言  β  - 15/12/17(木) 23:28 -

引用なし
パスワード
   ▼独身VBA さん:

>エクセル2007で作り正常に作動していたのですが、2013で動かすと、新しく作ったシートに文字が打ち込めません。ほかのシートに移動させて再度、新しくできたシートに戻すと打ち込めます。

文章の意味がいまいちわからないのですが、Win8.1+xl2013 で提示のコードを動かしてみました。
問題なくシートが追加され書きこまれます。
出来上がったシートへの手作業入力も、もちろんできています。

具体的にはどんな不具合なんでしょうか?
・ツリー全体表示

【77754】EXCEL2007で正常なのが2013では動かない
質問  独身VBA  - 15/12/17(木) 21:29 -

引用なし
パスワード
   エクセル2007で作り正常に作動していたのですが、2013で動かすと、新しく作ったシートに文字が打ち込めません。ほかのシートに移動させて再度、新しくできたシートに戻すと打ち込めます。なぜでしょうか?コードは以下の通りです。

Private Sub CommandButton1_Click()
  Dim ws As Worksheet
  Dim r As Long 'データの採取行数を代入する変数
  'データの最終行数を変数「r]に代入する
  r = Worksheets("会社名").Range("A1").CurrentRegion.Rows.Count
  '2行目からデータの最終行までループする
   Worksheets("会社名").Cells(r + 1, 2).Value = TextBox1.Value 'ユーザーフォームテキストボックス1を会社名シートの会社名欄に会社名を入れる
   Worksheets("会社名").Cells(r + 1, 3).Value = TextBox2.Value 'ユーザーフォームテキストボックス2を会社名シートの担当者欄に担当者を入れる
   Worksheets("会社名").Cells(r + 1, 4).Value = TextBox3.Value 'ユーザーフォームテキストボックス2を会社名シートの件名欄に件名を入れる
   Worksheets("FAX送信書").Copy after:=Worksheets(Worksheets.Count) 'FAX送信書をシートの一番あとにコピーする
   Worksheets(Worksheets.Count).Range("B4").Value = TextBox1.Value '新しいシートのB4にテキストボックス1の文字を入れる
   Worksheets(Worksheets.Count).Range("B6").Value = TextBox2.Value '新しいシートのB6にテキストボックス2の文字を入れる
   Worksheets(Worksheets.Count).Range("J15").Value = TextBox3.Value '新しいシートのJ15にテキストボックス2の文字を入れる
   Worksheets(Worksheets.Count).Range("W4").Value = Date '新しいシートのW4の欄に作成日を入れる
   Worksheets("会社名").Cells(r + 1, 1).Value = Worksheets(Worksheets.Count).Range("W4").Value
   ActiveSheet.Name = Format(Now, "yyyymmdd-hhmmss") '新規に作ったシートに日付と時間の名前をつける
   ActiveSheet.Hyperlinks.Add Anchor:=Worksheets("会社名").Cells(r + 1, 5), Address:="", SubAddress:= _
   Format(Now, "'yyyymmdd-hhmmss'") & "!A1", TextToDisplay:=Format(Now, "'yyyymmdd-hhmmss'") & "!A1" '新しいシートを会社名のリンク欄にハイパーリンクさせる
   
   Unload UserForm1 'ユーザーフォームを閉じる
   ActiveSheet.Range("C18:AE18").Select
   ActiveCell.Value = ""
    
End Sub
・ツリー全体表示

【77753】Re:特定条件の行に他シートの行を貼り付...
お礼  さいとう  - 15/12/15(火) 18:20 -

引用なし
パスワード
   空白行のデータをデリートして実行したらうまくいきました!
本当にどうもありがとうございました!
・ツリー全体表示

【77752】Re:特定条件の行に他シートの行を貼り付...
発言  γ  - 15/12/15(火) 7:16 -

引用なし
パスワード
   ----空白1行----
というのが見かけだけで、数式が入っているとかでは?
# 日中はアクセスしないので、別の方のコメントをお待ちください。
・ツリー全体表示

【77751】Re:特定条件の行に他シートの行を貼り付...
お礼  さいとう  - 15/12/15(火) 7:09 -

引用なし
パスワード
   ありがとうございました!
教えていただいた手順で見出しのコピーまではできました。

シート分けコピーは、1番上のブロックは1シートにうまく貼りつくのですが、
残りのシートはすべて2番目のブロックから最後のブロックまでが1シートに貼り付けとなってしまったので
コードを触ってみます。
・ツリー全体表示

【77750】Re:質問追記です
お礼  教えて下さい  - 15/12/15(火) 6:53 -

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

なんと!
ありがとうございます。

希望通りに出来ました。

もし、悩んだことがあったらお願いするかも知れませんが、その時はよろしくお願いいたします。
ありがとうございました。
・ツリー全体表示

【77749】Re:質問追記です
発言  γ  - 15/12/15(火) 6:07 -

引用なし
パスワード
   よくわからないが、されたいことは、
「あるセルに年月があったとき、A13以下に当月16日から翌月15日までの
日付を表示させたい。大の月、小の月いずれにも対応させたい」
ということですか。

仮にそうだとすると、以下のようなことになるでしょう。

C3に日付形式で 2015/2/1 とし、
書式 yyyy"年"m"月"で表示させます。

A13 は = C3 + 15 とし、

A14 は =IF(A13="","",IF(DAY(A13)=15,"",A13+1))
とし、以下A43までコピーします。

A13以下のセルの書式は、 m"月"d"日" とします。

もちろん VBAでも可能でしょう。
For .. Nextループを使えばよいでしょう。
でも、簡単なことを簡単に済ませばよいと思います。
・ツリー全体表示

【77748】質問追記です
発言  教えて下さい  - 15/12/15(火) 4:31 -

引用なし
パスワード
        質問内容が下手ですみません。
ちょっと追記します。
A13からA43まで日付が入ってます、例えば2015年2月なら
A41は3月16日
A43は3月18日
と、なってしまいます。
しかし、月によっては、A43は15日になるので、A41以降を16日以上なら
空白としたいのです、月によってシートを作れば良いだけなのですが、
違う方法で何とか出来ないものかと考えております。
・ツリー全体表示

【77746】日付をテキスト形式で取り出したいです
質問  教えて下さい  - 15/12/15(火) 4:09 -

引用なし
パスワード
   請求関係で月の一覧表を作成しているのですが、16日〜翌月15日までの表になっており
月によって28日とか31日とか日数はまちまちなので、翌月の16日以降を表示させたくないのです。
関数で何とか出来ないかと調べると、text関数なるものがあったのですが、上手く使いこなせません。
また、サイトによってはVBAでないと出来ないとも書いてあり、非常に悩んでおります。文字として取り出せれば関数で何とかなるのですが、どのようにすればよいのでしょうか?また、VBAならどのようにすればよいのでしょうか?
皆様の知恵を貸して下さい、よろしくお願いいたします。
・ツリー全体表示

【77745】Re:特定条件の行に他シートの行を貼り付...
発言  γ  - 15/12/14(月) 20:39 -

引用なし
パスワード
   一例です。

Sub test()
  Dim ws As Worksheet
  Dim newBook As Workbook
  Dim lastRow As Long
  Dim myRng As Range
  Dim myRng2 As Range
  Dim wsNew As Worksheet
  Dim r As Range

  Set ws = ThisWorkbook.Worksheets("Sheet1")

  Set newBook = Workbooks.Add

  '"項目"のみ抽出
  lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
  Set myRng = ws.Range("A1", ws.Cells(lastRow, 4))
  myRng.AutoFilter Field:=1, Criteria1:="項目"

  ' その一列目の可視セルを変数に持つ
  Set myRng2 = ws.Range("A2", ws.Cells(lastRow, 1)).SpecialCells(xlCellTypeVisible)

  'オートフィルターを解除
  myRng.AutoFilter

  '各ブロックについて処理
  For Each r In myRng2
    '見出しのコピー
    ThisWorkbook.Sheets("見出し").Rows(2).Copy r

    '各ブロックを別々のシートに転記
    Set wsNew = newBook.Worksheets.Add(after:=newBook.Worksheets(newBook.Worksheets.Count))
    r.CurrentRegion.Copy wsNew.Range("A1")
    wsNew.Name = r(1).Offset(-1).Value
  Next
End Sub

十分な検証をしていないので、そちらでよくチェックしてください。
・ツリー全体表示

【77744】Re:処理速度の向上
発言  おさむ  - 15/12/14(月) 10:33 -

引用なし
パスワード
   γ様

返信ありがとうございます。

申し訳ございません。

>ただ、下記のプログラムをブックを開いてすぐに実行する場合と
>ブックを開いて何処でもいいからセルの文字を編集してから実行する
>のでは処理速度が違います。

この理由が一番知りたかったことで、知ってらっしゃる方がいたらと
思い投稿致しました。
・ツリー全体表示

【77743】Re:特定条件の行に他シートの行を貼り付...
お礼  さいとう  - 15/12/14(月) 5:24 -

引用なし
パスワード
   ありがとうございます。
おっしゃっていることの筋道と意味はわかるのですが、記述の仕方が全くわかりません。
一日潰して考えましたがどうにもなりませんでした。。。
・ツリー全体表示

【77742】Re:特定条件の行に他シートの行を貼り付...
発言  γ  - 15/12/13(日) 8:54 -

引用なし
パスワード
   これから出掛けてしまうので、時間がとれませんがコメント追加しておきます。

オートフィルタだけを使って操作するには以下のようにします。
「項目」をキーワードにしてオートフィルタを掛けた段階で
A列の可視セルを変数にセットしておきます。

・オートフィルタを解除します。
・For each で以下の操作を繰り返します。
・その行に見出しをコピーペイストします。
・そのセルのCurrentRegionをとれば、そのブロックだけが選択できます。
 それをシートにコピーペイストしてください。
・シート名にすべき文字列は、そのセルのOffset(-1)に入っていますから、
 シー名を修正します。

こんな方針でいかがでしょうか。
・ツリー全体表示

【77741】Re:特定条件の行に他シートの行を貼り付...
発言  γ  - 15/12/12(土) 22:40 -

引用なし
パスワード
   最終行は下記のようにして求めることができます。
  Dim lastRow As Long
  lastRow = Cells(Rows.Count, 1).End(xlUp).Row

フィルタで抽出した段階で、
2行目からlastRowを対象にして貼付けると
可視セルだけに貼り付けることができます。

後半部分は、下記のコードを参考にしてください。
一行空白行がありますから、そこに注目して、Areasを活用します。

Sub test()
  Dim lastRow As Long
  Dim area As Range
  Dim myRng As Range
  
  lastRow = Cells(Rows.Count, 1).End(xlUp).Row
  
  Set myRng = Range("A1", Cells(lastRow, 1)).SpecialCells(xlCellTypeConstants)
  
  For Each area In myRng.Areas
    Set r = area.Resize(, 4)
    
    Debug.Print r.Address      '確認用
    
    ' r を 新しいブックのシートにコピー。
    ' シート名は r(1).Valueに変更
  Next
End Sub
・ツリー全体表示

【77740】Re:特定条件の行に他シートの行を貼り付...
発言  さいとう  - 15/12/12(土) 22:21 -

引用なし
パスワード
   ▼γ さん:
レスありがとうございます。

マクロの記録を使い、
sheet1でオートフィルタを用いてA列が「項目」の行を抽出して
「見出し」シートの2行目を貼り付けしようとしたところ、

Sub midashi_
  Sheets("Sheet1").Select
  Range("A1:D18").Select ←末行18としていますが実際の行数は変動します。
  Selection.AutoFilter
  Selection.AutoFilter Field:=1, Criteria1:="項目"
  Sheets("見出し").Select
  Rows("1:1").Select
  Selection.Copy
  Sheets("sheet1").Select
  Rows("7:13").Select
  ActiveSheet.Paste
End Sub

となって貼り付け行がRows("7:13")で固定されてしまい変動に対応しません。
また、オートフィルタで抽出した行になんとか貼れないものかと試行錯誤しているうちに、
抽出されない行(非表示になっている部分)にまで全部貼り付けてしまったりもしました。

そして、見出しを未処理のままでsheet1を
  Workbooks.Add
  ActiveSheet.Paste
により別のブックにすることはできたのですが、表でシートを分けることができませんでした・・・
・ツリー全体表示

【77739】Re:特定条件の行に他シートの行を貼り付...
発言  γ  - 15/12/12(土) 21:07 -

引用なし
パスワード
   ▼さいとう さん:
>手探りでマクロを勉強しておりますがわからないので質問させていただきます。
いいですね。頑張って下さい。
それで、どこまでできているんでしょうか?
部分的でも構いませんので、できているところまで書いてもらえますか?
・ツリー全体表示

【77738】特定条件の行に他シートの行を貼り付け&...
質問  さいとう  - 15/12/12(土) 20:17 -

引用なし
パスワード
   はじめまして。
手探りでマクロを勉強しておりますがわからないので質問させていただきます。
Excel2013です。

やおやA        
項目 みかん りんご なし
1日  5    1   2
2日  1    2   3
----空白1行----
やおやB        
項目 みかん りんご なし
1日  2    4   5
2日  5    2   1
3日  4    5   3
----空白1行----
やおやC        
項目 みかん りんご なし
1日  4    5   2
2日  1    1   3
3日  2    5   3
4日  1    8   6
5日  3    2   1

上記のように、セルA1に「やおやA」が入る形で、やおやA〜C(増減あり)の表がsheet1に空白行を挟んで縦に並んでいます。
各店舗の表の行数はバラバラで、変動します。

1.同じブック内の別シート(シート名:見出し)の2行目の行を、sheet1の上記表の各「項目」で始まる行に貼り付けたい。(現在の「項目〜」で始まる行が不要。差し替えたい)
(「項目」はA列、「みかん」はB列、「りんご」はC列に入っています)

2.1の処理の終わったそれぞれのやおや表を、新規ブックにシート別に貼り付けたい。

3.新規ブックのシート名をやおやの名前にしたい。

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

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