あなたの映画力を試せる!POPLETA映画検定(無料) >>

Excelのマクロ記憶機能を使って、次の事をやりたいなと思っています。

①記入済イベントアンケートを入力し
②クライアントに報告用の、別のExcelファイルにコピペし
③②のファイルの中で、アンケート内容のシートとは別に、グラフ用のシートがあるので、そこに反映させるようにする

こういった作業をしたい場合、②や③ならマクロの記憶が使えるかと考えています。
たとえば、元のデータ(①)に後から間違いに気づいて修正をした場合、マクロの場合は修正や加筆などが自動更新されるのでしょうか?
ピボットだと、元データを変えた場合「更新」を押さないといけませんが、マクロも何か押すボタンはありますか?

A 回答 (2件)

>元のデータ(①)に後から間違いに気づいて修正をした場合、マクロの場合は修正や加筆などが自動更新されるのでしょうか?



そういうご相談する前の段階ですが、マクロコードでどのように設計していたかが問題です。だいたい、ネットのアンケート調査と同じようなスタイルで、最後に一覧表をみせ、確認させて、それで、「更新ボタン」を押させるようにします。

だから、更新ボタンを押した後は、もう「不可逆(もどせない)」です。

私の感覚では、自動更新という機能をどこかに取り付けるというのは、可能ですが、それをしないのではないでしょうか。ピボットテーブルとは、違った問題でしょう。
データ入力の失敗や修正でもとに戻すような前提でしたら、マクロは考えない方がよいかもしれません。
    • good
    • 0

市役所などの自治体が行っているパソコン相談で相談したほうが良いと思います。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Q二つの条件に合致するセルに値を入力したい(VBA)

二つの条件に合致するセルに値を入力したいです。

ワークシート名「元DATA」
  A列  B列   C列   D列    E列  ・・・
1 名前  ***   *** 2018/7/1 2018/7/8
2 aaa  ***   ***  100    
3 bbb  ***   ***        2000




ワークシート名「反映DATA」
  C列  ・・・  AI列    ・・・  AQ列   AR列
7 名前  ・・・  2018/5/6  ・・・ 2018/7/1 2018/7/8
8  aaa  ・・・  
9 ccc  ・・・  
10 bbb  ・・・  



↓「元データ」の名前(列)と日付(行)が一致する「反映DATA」のセルに、「元データ」の
  対象となる数値を入力したいです。
ワークシート名「反映DATA」
  C列  ・・・  AI列    ・・・  AQ列   AR列
7 名前  ・・・  2018/5/6  ・・・ 2018/7/1 2018/7/8
8  aaa  ・・・         ・・・  100
9 ccc  ・・・         ・・・ 
10 bbb  ・・・         ・・・       2000 




今回のデータを例にすれば、「元データ」のセルD2と「反映データ」のセルAQ8が一致するセルと
なるので、「元データ」のセルD2のデータを「反映データ」のセルAQ8に入力させたいです。
対象となる「反映データ」のセルにもともと値が入力されていたとしても上書きで構いません。
VBAで実現させたいのですが、構文をご教授頂けないでしょうか。
①「元データ」のA列、「反映DATA」のC列(7行目以降)は間に空白が存在しません。
②「反映データ」のセルに値が入力されていたとしても上書きで構いません。
③それぞれの日付データは例として挙げただけで、毎回開始日付が異なります。
④必ずしも条件に合致するデータが「元データ」に無い場合もありますが、それは無視して構いません。

二つの条件に合致するセルに値を入力したいです。

ワークシート名「元DATA」
  A列  B列   C列   D列    E列  ・・・
1 名前  ***   *** 2018/7/1 2018/7/8
2 aaa  ***   ***  100    
3 bbb  ***   ***        2000




ワークシート名「反映DATA」
  C列  ・・・  AI列    ・・・  AQ列   AR列
7 名前  ・・・  2018/5/6  ・・・ 2018/7/1 2018/7/8
8  aaa  ・・・  
9 ccc  ・・・  
10 bbb  ...続きを読む

Aベストアンサー

何度もごめんなさい。

最初からコードをやり直してみました。

Sub Sample2()
 Dim i As Long, j As Long, cnt As Long
 Dim lastRow As Long, lastCol As Long
 Dim c As Range, r As Range, wS As Worksheet
  Set wS = Worksheets("元データ")
  With Worksheets("反映DATA")
   '//▼「反映DATA」シートの太字を解除//
    lastRow = .Cells(Rows.Count, "C").End(xlUp).Row
    lastCol = .Cells(7, Columns.Count).End(xlToLeft).Column
     Range(.Cells(8, "AI"), .Cells(lastRow, lastCol)).Font.Bold = False
   '//▲ここまで//
   For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row
    For j = 4 To wS.Cells(1, Columns.Count).End(xlToLeft).Column
     If wS.Cells(i, j) <> "" Then
      Set c = .Range("C:C").Find(what:=wS.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole)
      Set r = .Rows(7).Find(what:=DateValue(Format(wS.Cells(1, j), "yyyy/m/d")), LookIn:=xlValues, lookat:=xlWhole)
       If Not c Is Nothing And Not r Is Nothing Then
        cnt = cnt + 1
        With .Cells(c.Row, r.Column)
         .Font.Bold = True
         .Value = wS.Cells(i, j)
        End With
       End If
     End If
    Next j
   Next i
    .Activate
  End With
   MsgBox cnt & "件(太字セル)を更新"
End Sub

これで何とかお望みの動きにならないでしょうか?m(_ _)m

何度もごめんなさい。

最初からコードをやり直してみました。

Sub Sample2()
 Dim i As Long, j As Long, cnt As Long
 Dim lastRow As Long, lastCol As Long
 Dim c As Range, r As Range, wS As Worksheet
  Set wS = Worksheets("元データ")
  With Worksheets("反映DATA")
   '//▼「反映DATA」シートの太字を解除//
    lastRow = .Cells(Rows.Count, "C").End(xlUp).Row
    lastCol = .Cells(7, Columns.Count).End(xlToLeft).Column
     Range(.Cells(8, "AI"), .Cells(lastRow...続きを読む

Q数式の[@~]について

EXCELのテンプレートにもあるよな、[@]記号が使われている列の計算式は、どのように入力するものでしょうか?

また、それはどういいう表現するものなのでしょうか?    ○○記号○○参照とか

よろしくお願い致します。

Aベストアンサー

エクセルはほぼ使わないので全く確認していませんが。

Excel テーブルでの構造化参照の使い方
https://support.office.com/ja-jp/article/excel-%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%A7%E3%81%AE%E6%A7%8B%E9%80%A0%E5%8C%96%E5%8F%82%E7%85%A7%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9-f5ed2452-2337-4f71-bed3-c8ae6d2b276e

QVBAでの変数の使い方

VBAでの変数の使い方について教えて下さい。
例えば、列を選択する時
Columns("C:XH").EntireColumn.Select

これに対して、XH列を変数にしたいのですが、下記のようにするとエラーになってしまいます。
Columnsは数字に対応していない?からでしょうか?
どのようにすれば良いかご教示お願いします。
LASTCOL = Cells(3, Columns.Count).End(xlToLeft).Column
Columns("C", LASTCOW).EntireColumn.Select

Aベストアンサー

こんにちは

>Columns("C", LASTCOW).EntireColumn.Select
LASTCOWはLASTCOLの間違いと思いますが、Columnsの指定方法にご提示のような指定方法は無いはずです。
また、間違いではありませんが、Columns().EntireColumn って意味がないと思いませんか?(列の列全体を取得しようとしているので、何も変わらない)

(3行目の)C列から最終列までの列全体を選択したいという意味と想像しました。
方法はいろいろあると思いますが、例えば、
「C列から、最終列までに広げる」と考えれば
 LASTCOL = Cells(3, Columns.Count).End(xlToLeft).Column
 Columns("C").Resize(, LASTCOL - 2).Select
とか、
(ただしこの場合はLASTCOL>2であるチェックが必要かも知れません)

「3行目で範囲を設定して、その列全体を選択する」なら
 Range(Cells(3, 3), Cells(3, Columns.Count).End(xlToLeft)).EntireColumn.Select
とか。

上記はほんの一例で、他にも様々な方法が考えられます。

こんにちは

>Columns("C", LASTCOW).EntireColumn.Select
LASTCOWはLASTCOLの間違いと思いますが、Columnsの指定方法にご提示のような指定方法は無いはずです。
また、間違いではありませんが、Columns().EntireColumn って意味がないと思いませんか?(列の列全体を取得しようとしているので、何も変わらない)

(3行目の)C列から最終列までの列全体を選択したいという意味と想像しました。
方法はいろいろあると思いますが、例えば、
「C列から、最終列までに広げる」と考えれば
 LASTCOL = Cells(3, Colum...続きを読む

Q月末の自動計算

月末火曜日の日付をスタートとして稼働日数を求めたいと思っています。

10月なら9/25~10/30まで
11月なら10/30~11/27まで
12月なら11/27~12/25までの日数を計算したいです。

月末水曜日になると当月の日数に自動で計算が切り替わるよう計算することは可能でしょうか。

わかる方がいれば教えていただきたいです。
※土日は日数に含んでOKです。

Aベストアンサー

No1です

>先程試したところ8と表示されるのですが11/28~今日までが8日という計算でしょうか?
はい。下に示しますように『今日』を対象に計算する式として作成してしまいましたので、12/5(=本日)は11/27(=最終火曜日)から数えて8日目という意味になります。
(シートが自動計算の設定になっていれば、明日になると9と表示されるはずです)

私の勝手な勘違いだったかもしれませんが、「今日が月末火曜日から何日目かを計算する」関数式として考えていましたが、対象が「今日」とは限らなかったのでしょうか?
その場合は、式中の「TODAY()」の部分を対象の日(=シリアル値)に置き換えればそのまま同じ計算が可能なはずです。
例えば、対象の日がA1セルに入力されているとするなら、TODAY()を全てA1に置き換えればよいといった感じです。

>ただ、水曜日になったら前日の火曜日分も含めて計算してほしいです。
翌日の水曜日を2日目と計算したいという意味でしょうか?
(No1の説明を読んでいただければわかりますが)現在の式は、水曜日は1(日目)と表示される式になっています。
修正したい場合は、No1の式より常に1日多い値になれば良いだけなので、式の最後に「+1」を加えれば、お求めの結果になると思います。

>とても複雑な回答で解読できなかったので教えていただけると幸いです
式は少々長いですが、全体としての構成は、単純にIFで場合分けした式になっています。
ご参考までに、大雑把な構成を言葉で示すならば・・・
『対象日(今日)がその月の最終火曜日より前なら、前月の最終火曜日からの日数を数え、後ならその月の最終火曜日からの日数を数える』
という式になっています。

No1です

>先程試したところ8と表示されるのですが11/28~今日までが8日という計算でしょうか?
はい。下に示しますように『今日』を対象に計算する式として作成してしまいましたので、12/5(=本日)は11/27(=最終火曜日)から数えて8日目という意味になります。
(シートが自動計算の設定になっていれば、明日になると9と表示されるはずです)

私の勝手な勘違いだったかもしれませんが、「今日が月末火曜日から何日目かを計算する」関数式として考えていましたが、対象が「今日」とは限らなかったのでしょう...続きを読む

QExcel データ抽出 日付 1900/1/0 1月0日

以前にどなたかが、質問の回答としての関数式をそのまま使っていますが一つだけ問題があります。
詳しい方よろしくお願いします。
Sheet1に年間データがあります。そこからSheet2へE1セルで月を指定して月単位でデータを抽出しているのですが
1月だけ抽出データの最後に、1900/1/0をひろってしまいます。書式を変えても1月0日をひろいます。他の月は空白を返してくれるのですが、1月だけは、書式コピー分すべて1900/1/0を返してきます。文字列や数値は大丈夫です。日付だけです。対処法お願いします。
なんとなくしか理解出来ていない、わたしですいません( ノД`)シクシク…

Sheet1 抽出作業列 F列  
=IF(OR(Sheet2!E$1="",MONTH(A2)<>Sheet2!E$1),"",ROW())

Sheet2 抽出列 A~E列 A列日付
=IF(COUNT(Sheet1!$F:$F)<ROW(E1),"",INDEX(Sheet1!A:A,SMALL(Sheet1!$F:$F,ROW(E1))))
よろしくお願いします。

以前にどなたかが、質問の回答としての関数式をそのまま使っていますが一つだけ問題があります。
詳しい方よろしくお願いします。
Sheet1に年間データがあります。そこからSheet2へE1セルで月を指定して月単位でデータを抽出しているのですが
1月だけ抽出データの最後に、1900/1/0をひろってしまいます。書式を変えても1月0日をひろいます。他の月は空白を返してくれるのですが、1月だけは、書式コピー分すべて1900/1/0を返してきます。文字列や数値は大丈夫です。日付だけです。対処法お願いします。
なんと...続きを読む

Aベストアンサー

こんにちは

>1900/1/0をひろってしまいます
実際にそのようなデータがあるのなら、関数の機能としては間違いではないと思いますが、多分、「空白」セルが抽出されていて、結果的にそのような表示になっているのではないかと推測します。

セルの位置関係や内容(意味)がご質問文だけではよくわからないので、半分は想像ですが・・・
>Sheet1 抽出作業列 F列  
>=IF(OR(Sheet2!E$1="",MONTH(A2)<>Sheet2!E$1),"",ROW())
A列に対象とする日付が並んでいて、その範囲内に空白セルが混在しているものと推測します。
(1月を抽出する際に、空白セルの行のF列に抽出用の行番号が表示されているのではないでしょうか?)

対策として、A列が空白の場合はピックアップしないように、式内のORに条件を追加すればよいのではないかと思います。
具体的には
 =IF(OR(Sheet2!E$1="",A2="",MONTH(A2)<>Sheet2!E$1),"",ROW())
といった感じ。

(半分は想像ですので、当たるも八卦です。悪しからず)

こんにちは

>1900/1/0をひろってしまいます
実際にそのようなデータがあるのなら、関数の機能としては間違いではないと思いますが、多分、「空白」セルが抽出されていて、結果的にそのような表示になっているのではないかと推測します。

セルの位置関係や内容(意味)がご質問文だけではよくわからないので、半分は想像ですが・・・
>Sheet1 抽出作業列 F列  
>=IF(OR(Sheet2!E$1="",MONTH(A2)<>Sheet2!E$1),"",ROW())
A列に対象とする日付が並んでいて、その範囲内に空白セルが混在しているものと推測し...続きを読む

Qエクセルの質問です りんご みかん 梨 ぶどう… りんご 0 3 1 4… みかん 3 0 4 4…

エクセルの質問です
りんご みかん 梨 ぶどう…
りんご 0 3 1 4…
みかん 3 0 4 4…
梨 2 4 0 3…
ぶどう 4 4 3 0…
︙ ︙ ︙ ︙ ︙
最大値 4 4 4 4…
組み①ぶどう①梨①みかん①りんご
合わ ②ぶどう ②みかん

こういう表を作っていて最大値が同じ数値がある場合、2こめ、3こめ…と表の下(組み合わせのところ)に出せるようにしたいのですがどうすればいいのかわかりません。
1つ目はINDEX関数などを使って出すことができたのですが2番目以降をどうしたらいいのか教えてください。

Aベストアンサー

こんにちは!

やりたいことと異なるかもしれませんが・・・
↓の画像の配置だとして、
B12セルに
=IFERROR(INDEX($A$2:$A$9,SMALL(IF(B$2:B$9=B$10,ROW($A$2:$A$9)-1),ROW(A1))),"")

配列数式なので、Ctrl+Shift+Enterで確定!(←必須★)し
フィルハンドルで列・行方向にコピーすると、画像のような感じになります。m(_ _)m

Qエクセル関数で 4県あって、1を押したら東京が2を押したら神奈川などいちいち東京とか打ち込まない方法

エクセル関数で
4県あって、1を押したら東京が2を押したら神奈川などいちいち東京とか打ち込まない方法ありますか⁉︎

Aベストアンサー

『データの入力規則』を使うのが簡単です。

◆手順 (添付図参照・・・図の番号と手順の番号は対応しています)
1.リストを空いているセルに記入します。 リストとは、東京、神奈川、・・・の表のことです。
2.入力したいセルを選択して、メニューから『データ』
3.『データの入力規則』
4.『データの入力規則』
5.入力値の種類のところで『リスト』を選択
6.元の値のところに、手順1で作成したリストのセル範囲を指定
7.『OK』

これで、▼印をクリックして、選択肢から選べるようになります。

Qvlookupにて、返した値をさらに、他の文字列に変換するには

タイトルの件、質問します。

下記画像をご覧ください。
B2には、次の式が挿入されています。 =VLOOKUP(A2,$D$2:$E$6,2,FALSE)
B3には、              =VLOOKUP(A3,$D$2:$E$6,2,FALSE)

B2の501をさらに、【五】に変換
VLOOKにて値【101や201】を返した後に、さらに、101を一、201を二
501を五 というように、任意の文字列に変換をするにはどすれば良いでしょうか?

宜しくお願いします。

Aベストアンサー

ちなみに、表示形式でやる場合C2に
=INT(B2/100)
→表示形式をユーザー定義で「[DBNum1]」にする。

TEXT関数なら
=TEXT(INT(B2/100),"[DBNum1]")

Qエクセルについて。

次の数式を求める関数(下の方のプラン表)は、どんな数式を打てば良いのでしょうか?教えていただけると幸いです。

Aベストアンサー

単純な足し算ですよね。
添付画像のように作ったとして

[C8]=SUM($B$2,C$7,$B8)

これを[C8:F12]の範囲にコピーすればOK。

通常、数式のセルは、コピー貼り付けすると、移動先に応じてセルアドレスが変わってしまいますが、
「$」をつけることで、固定することができます。

上の式だと、どこに移動しても

$B$2 は B2 を参照するように固定される。

C$7 は 7行目 を参照するように固定される。
(式を下にコピーしても、7行目に固定される)

$B8 は B列 を参照するように固定される。
(式を右にコピーしても、B列に固定される)

ということになります。
$をつけて参照先を固定するのを「絶対参照」、
つけていない普通の場合は「相対参照」、
と言います。
より詳しいことは、このキーワードで検索して調べてみてください。

金額表示については、セルの書式から、
分類:通貨
記号:\
にしてあります。
実際のセルに「\」は入力されていません。

Q【VBA】フィルタしたセルをコピーし、フィルタしたまま複数貼り付け

以下のような場合、マクロをどのように書けば良いか教えてください。

A列 B列 C列
あ  1
い  2
う  
あ  3
い  4

※実際は1000以上行数があります

■やりたいこと
A列で「あ」でフィルタをかける
A列のフィルタがかかったままB列をコピー
C列に貼り付け
結果、以下のようになってほしいです。

A列 B列 C列     A列 B列 C列
あ  1        あ  1  1
あ  3        い  2
         ⇒  う  
            あ  3  3
            い  4
            う

初心者なりにいろいろ試してみましたがうまくいきません。
ご教示いただけますと幸いです。
どうぞよろしくお願いいたします。

Aベストアンサー

こんにちは!

A列が「あ」であればC列がその行のB列データになれば良いのですね。
オートフィルタではなく、単に値の代入ではどうでしょうか?

No.1さんもおっしゃっているようにオートフィルタの場合は1行目が何らかの項目行になっている!というコトが前提だと思いますので、
2行目以降にデータがあるとします。

Sub Sample1()
 Dim i As Long, lastRow As Long
 Dim myR
  lastRow = Cells(Rows.Count, "A").End(xlUp).Row
   myR = Range(Cells(2, "A"), Cells(lastRow, "C"))
    For i = 1 To UBound(myR, 1)
     If myR(i, 1) = "あ" Then
      myR(i, 3) = myR(i, 2)
     Else
      myR(i, 3) = ""
     End If
    Next i
   Range(Cells(2, "A"), Cells(lastRow, "C")) = myR
End Sub

こんな感じではどうでしょうか?m(_ _)m

こんにちは!

A列が「あ」であればC列がその行のB列データになれば良いのですね。
オートフィルタではなく、単に値の代入ではどうでしょうか?

No.1さんもおっしゃっているようにオートフィルタの場合は1行目が何らかの項目行になっている!というコトが前提だと思いますので、
2行目以降にデータがあるとします。

Sub Sample1()
 Dim i As Long, lastRow As Long
 Dim myR
  lastRow = Cells(Rows.Count, "A").End(xlUp).Row
   myR = Range(Cells(2, "A"), Cells(lastRow, "C"))
    For i = 1 T...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

価格.com 格安SIM 料金比較