【処理概要】
担当者一覧ファイルがあり、そのファイルには各担当者の目標と売上がデータが入っています。
各担当者に目標を入力してもらうため、担当者別にファイルを作成し、かつ目標列は各担当者ファイルの対応する列を参照する数式に変更します。
 例)担当者一覧.xlsxの「C2」はA.xlsxの「C2」を参照する。(数式:=[佐藤.xlsx]Sheet1!C2)

【悩み】
担当者別にファイルを作成するマクロは出来たのですが、目標列に元から入っている数式をうまく変更することが出来ません。

例えば、添付画像の場合、担当者一覧ファイルの目標列の数式は上から
(1)
=[佐藤.xlsx]Sheet1!C2
=[佐藤.xlsx]Sheet1!C3
=[佐藤.xlsx]Sheet1!C4
=[鈴木.xlsx]Sheet1!C2
=[鈴木.xlsx]Sheet1!C3
=[山田.xlsx]Sheet1!C2
=[山田.xlsx]Sheet1!C3

となることが正しいのですが、forメソッドを使用して実行したところ、以下のようになりました。
(2)
=[佐藤.xlsx]Sheet1!C2
=[佐藤.xlsx]Sheet1!C3
=[佐藤.xlsx]Sheet1!C4
=[鈴木.xlsx]Sheet1!C5
=[鈴木.xlsx]Sheet1!C6
=[山田.xlsx]Sheet1!C7
=[山田.xlsx]Sheet1!C8

数式の書き換えは、Replaceメソッドを使用していますが、一括で置換されてしまうため、
以下のような記述をしています。

Dim a, b, Row, RowEnd As Long
Dim Emp As String

Row = 2
For Row To RowEnd
 Emp = Range("A" & Row ).Value
 a = "=SUM(E:" & Row & "G:" & Row & ")" ←例です。
 b = "=[" & Emp & ".xlsx]Sheet1!C" & Row

 Range("C" & Row ).Select
 Selection.Replace what:= a, Replacement:= b
Next Row

この記述では(2)になるように作ってしまっているのですが、ここから(1)のようにするにはどうすればよいかわかりません。。。

不躾で、大変申し訳ございませんが、どなたかヒントをくださいますでしょうか。
ご不明な点がございましたら回答致しますので、よろしくお願いします。

「マクロで数式を書き換えたい。」の質問画像

このQ&Aに関連する最新のQ&A

A 回答 (3件)

要は、A列の氏名が変わったら、リンク先の行を2からカウントし直したいと言う事ですよね?



そうであれば、前回の氏名を覚えておく変数と、リンク先の行数用の変数を用意して↓の様にします。

Dim b, Row, RowEnd As Long
Dim Emp As String

Dim Emp2 As String '前回氏名
Dim Row2 As Long 'リンク先Row

RowEnd = 8
Emp2 = "" '前回氏名の初期値
For Row = 2 To RowEnd
  Emp = Range("A" & Row).Value
  If Emp <> Emp2 Then Row2 = 2 '今回の氏名と、前回氏名が異なったらリンク先Rowは2にリセット
  b = "=[" & Emp & ".xlsx]Sheet1!C" & Row2
  Range("C" & Row).Formula = b 'Replaceは使いません
  Emp2 = Emp '今回の氏名を、前回氏名変数に代入
  Row2 = Row2 + 1 'リンク先Rowをカウントアップ
Next Row


また「Row」の様にプロパティ等で良く使用される単語を変数名にすると混乱の元ですのでお勧めしません。
    • good
    • 0

マクロでやる場合は、普通は質問者のやっているようなこと(ロジックでは)でやらない。


質問者がマクロやプログラムの経験が少なく、質問のように思いついたのだろうが、珍奇であると思う。
またエクセルの数式に思い入れがありすぎて(あるいは他を知らないから)そういうやり方をやろうとしたのだろうが
ーー
変える気は無いと思うが参考までに。
今後もマクロを使おうと思うなら、もっと勉強・経験しないとだめとおもいます。
ーー
データを寄せ集めればよいと思うので
集約シートをSheet1
各営業マンのデータSheet2、Sheet3、Sheet4の例でテスト
Sub test01()
k = 2 '集約シートは第2行から
Set sh1 = Worksheets("Sheet1") '集約シート
For Each sh In Worksheets '各シートについて
If sh.Name <> "Sheet1" Then '集約シート以外は
d = sh.Range("A65536").End(xlUp).Row '最下行取得
For i = 2 To d '各列データを集約シートに
sh1.Cells(k, "A") = sh.Cells(i, "A")
sh1.Cells(k, "B") = sh.Cells(i, "B")
sh1.Cells(k, "C") = sh.Cells(i, "C")
sh1.Cells(k, "D") = sh.Cells(i, "D")
k = k + 1 '集約シートの1行下を選択するため
Next i
End If
Next
End Sub
ただし  集約シートにはデータしか移ってない。関数式は別途手動で。
ーー
結果
佐藤食品108
佐藤雑貨2026
佐藤衣類3020
佐藤サービス4038
山田食品158
山田雑貨2424
山田衣類3225
山田サービス167
田中食品159
田中雑貨2120
田中衣類3426
田中サービス3534
田中飲料1512
元データは省略するが、どんなものかわかりますね。

この回答への補足

数式を入力するよりも、マクロで各ファイルからデータをとってくるイメージで捕らえてもよろしいでしょうか?

ご指摘の通り、マクロやプログラムの経験はなく、初めてのコーディングです。

補足日時:2011/04/20 10:53
    • good
    • 0

Sub マクロ自信ないけど()


Dim A As String
Dim n As Long
Dim i As Long
  A = "" '初期値入力
  'for~next構文
  For n = 2 To Range("A2").End(xlDown).Row
    '数式の行番号を判定する
    If A = Range("A" & n) Then
      i = i + 1
    Else
      i = 2
    End If
  '下記は数式を書き換えてください
  Range("B" & n).Formula = "=Sheet1!C" & i
  '判定の値を代入
  A = Range("A" & n).Value
  Next
End Sub
    • good
    • 0

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

このQ&Aを見た人が検索しているワード

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

Q一括償却資産の任意償却について

10万円以上20万円未満の一括償却資産を計上しました。今期赤字の為、たの減価償却資産は任意償却で償却しませんでしたが、一括償却資産は任意償却できるのでしょうかそれとも強制償却でしょうか?

Aベストアンサー

法人の場合は任意償却です。(個人の場合は強制償却です。)

一括償却資産の場合、法人税法上損金に算入される金額は、法人が損金経理をした金額のうち、次の算式により計算した金額に達するまでの金額とされています。

損金算入額限度額=一括償却対象額×その事業年度の月数/36

このように一括償却資産の場合も償却限度額が定められているだけで、その範囲内なら損金算入が認められるということです。

Qワードの数式を書く際に、数式番号は右寄せ、数式自体は左寄せにしたいので

ワードの数式を書く際に、数式番号は右寄せ、数式自体は左寄せにしたいのですが、方法が分かりません。
ワードのバージョンは2002です。
お分かりの方、教えてください。

Aベストアンサー

1.数式は「数式3.0」で作成します
2.数式番号は図表番号等で,数式とは別に文字で記入します
3.数式番号の置き場所はタブを設定して揃えます


準備
ツールのオプションの編集と日本語入力で,図をい挿入貼り付ける形式を「行内」にする

準備
ツールバーの所で右クリック,ユーザー設定ダイアログを出し,コマンドのタブの挿入の分類で「Microsoft 数式エディタ」をツールバーに出しておく

作成1
数式エディタボタンをクリックして数式を(数式だけを)作成,配置する

作成2
配置した数式の後ろにカーソルを入れて,書式メニューのタブとリーダーで
 タブ位置 130mm と記入
 左揃えにマーク
 リーダは5番をマークしてOKする

作成3
配置した数式の後ろでTABキーを打ち,続いて数式番号を記入する。
どんな番号の付け方で数式番号を記入したいのか具体的にヤリタイ事がご相談に書かれていないが,たとえば(1)などのように直接書き入れる。
または配置した数式を1クリックしてから,挿入メニューの参照で図表番号を工夫して使用しても良い。たとえば章番号を付加して(2.1)等のように記入させる場合もある。
必要に応じてTABの前後にスペースを入れて,見た目を整える。

1.数式は「数式3.0」で作成します
2.数式番号は図表番号等で,数式とは別に文字で記入します
3.数式番号の置き場所はタブを設定して揃えます


準備
ツールのオプションの編集と日本語入力で,図をい挿入貼り付ける形式を「行内」にする

準備
ツールバーの所で右クリック,ユーザー設定ダイアログを出し,コマンドのタブの挿入の分類で「Microsoft 数式エディタ」をツールバーに出しておく

作成1
数式エディタボタンをクリックして数式を(数式だけを)作成,配置する

作成2
配置した数式の後ろにカ...続きを読む

Q3年一括償却資産の減価償却終了後の処理について

一括償却資産で3年たって償却が終わった物についての処理を教えてください。

当方、10~20万の一括償却資産の減価償却を通常の資産と同じく
「減価償却費」0000円-「減価償却累計額」0000円というように
「間接法」で処理しています。
間接法なので3年の償却が終わったあとも「資産勘定」と「減価償却累計額」が残ってしまっています。

一括償却資産は3年たって償却が終わったら 「減価償却累計額」0000円-「資産勘定」0000円
という仕訳をして帳簿から消して良いのですよね?

本来、一括償却資産は通常の資産とは分けて考えて「直接法」で処理するのが基本なのでしょうか?

Aベストアンサー

一括償却資産は、この制度ができる前であれば消耗品費として費用処理していたものです。
したがって税務上の処理もこれを個々の資産として認識するのではなく、その事業年度で取得した10万円以上20萬円未満の資産を合計して3年間で損金算入することになっています。個々の資産を廃棄したとしても廃棄損の計上を認めていません。
ということで、正しい会計処理は取得時に全額費用処理して、税務調整していくというものだと考えます。
資産計上する場合は、税務特有の繰延資産と同じものと考え長期前払費用等として直接法で処理すべきです。

QWordファイルの概要タブ内の変更

Word2003を利用しています。

作成したWordファイルのプロパティを開き、
「概要」タブにあるタイトル、表題、作成者を変更(消去)したいのですが、
変更(消去)後に「適応」をクリックし「OK」を押しても、
しばらくすると元に戻っています。
(適応→OKの直後は反映されています)
どうしたら変更(消去)することができるでしょうか。

このファイルは、
「おそらく2003以前のWordで作成したWordファイル」をコピーしたものです。
(文書内のレイアウト等のフォーマットを残したいため、Word2003で開いて別名で保存したもの)
読み取り専用になっていたりはしません。
また、
Word2003を起動し、ツール>オプション>ユーザー情報、に書かれている名前と、
プロパティの概要タブに表示されている作成者は違うので、
「ユーザー情報」にある名前が書かれているわけでもないようです。

Aベストアンサー

こんにちは

http://office.microsoft.com/ja-jp/word/HP051901021041.aspx
「ツール」>「オプション」>「セキュリティ」
「保存するときに個人情報をファイルのプロパティから削除する」
にチェックでいかがでしょうか。

検索していると
http://www.atmarkit.co.jp/fwin2k/win2ktips/940rmofprvcy/rmofprvcy.html
# なぜわざわざこういうのが必要なのかはMS仕様??

では。

Q一括償却資産の損金算入について 表記の違い

 おはようございます。

 一括償却資産の損金算入について、教えてください。

 通常、減価償却の償却超過額は、別表4で、「減価償却超過額」という表記をするのが一般的だと思うんですが、一括償却資産では、「損金不算入額」という表記になっていました。

 一括償却資産は、厳密に言うと減価償却ではないのでしょうか? 単なる表記の違いということなのでしょうか?

 どなたか、ご存知の方がいらっしゃいましたら、教えてください。

Aベストアンサー

こんばんは。

asukaaさんの仰るように一括償却資産の償却は厳密にいえば
減価償却ではありません(減価償却の定義からすれば)。
一括償却というのは税法上認められた一種の特典にすぎない、
と考えられます。そういったこともあってか、純粋な減価償却
については「減価償却資産の “償却額” の計算に関する明細書」
という表名であるのに対し、一括償却については「一括償却資産の
“損金算入” に関する明細書」となっています。

独立した別表での限度額計算があるものについては、その別表で
(1)「損金算入限度額」とされているものの限度超過額
    →別表四で「損金不算入額」

(2)「償却限度額」とされているものの限度超過額
    →別表四で「償却超過額」

(3)「繰入限度額」とされているものの限度超過額
    →別表四で「繰入超過額」

(4)「圧縮限度額」とされているものの限度超過額
    →別表四で「圧縮超過額」

と表記するようです。所得に加算するという意味ではいずれも
違いはありませんから、単に慣例というか分かりやすいように
ということでしょうか。

(1)に該当するものとして一括償却資産の損金算入、寄付金、
交際費などがあります。
(2)に該当するものとして減価償却、繰延資産の償却があります。
(3)に該当するものは引当金です。
(4)に該当するものは圧縮記帳です。

こんばんは。

asukaaさんの仰るように一括償却資産の償却は厳密にいえば
減価償却ではありません(減価償却の定義からすれば)。
一括償却というのは税法上認められた一種の特典にすぎない、
と考えられます。そういったこともあってか、純粋な減価償却
については「減価償却資産の “償却額” の計算に関する明細書」
という表名であるのに対し、一括償却については「一括償却資産の
“損金算入” に関する明細書」となっています。

独立した別表での限度額計算があるものについては、その別表で
(1)「...続きを読む

QWordファイルから別Wordファイルのマクロを起動したい

Word2003でマクロを作成しました。

WordファイルAにはマクロを保存したくないので、
WordファイルBに保存しています。
このマクロをWordファイルAから起動したいのですができません。
WordファイルAを開き「マクロの実行」ダイアログボックスから
WordファイルB内のマクロを選択して
「実行」ボタンを押して実行したいのですが、
一覧にマクロ名が表示されないのです。

Excelの場合は、ExcelファイルAからExcelファイルBのマクロを
呼び出すことができるのですが、
(例えばブック名!モジュール名.マクロ名)
Wordではできないのでしょうか?
何か設定が必要でしょうか?

ご存知の方がいらっしゃいましたら、
よろしくお願いいたします。

Aベストアンサー

こんばんは。

>(例えばブック名!モジュール名.マクロ名)
この方法は、私は、Excelの場合のほうが特殊だと思います。
Excelは、モジュールが複雑なので、固有のマクロを呼び出さざるを得ないわけです。

もちろん、Wordでも、Application.Run で呼び出すことは可能ですが、そういうことは、Wordではあまりしません。

Wordの場合は、ActiveDocument にはマクロをいれずに、基本的に、Normal.dot にマクロを入れる構造になっています。だから、Normal.dot(C:\Documents and Settings\[UserName]\Application Data\Microsoft\Templates\ または、...Microsoft\Word\STARTUP\) の標準モジュール等(ローカルモジュール・プロシージャ以外)に入れさえすれば、どこでも呼び出しが出来るようになっています。後者のSTARTUPに入れたほうが加工がしやすいです。

似てはいても、ExcelのPERSONAL.XLS とは、基本的な呼び出しの構造が違います。Wordは自動的に参照設定が組まれています。

他には、テンプレートフォルダ(C:\Documents and Settings\[UserName]\Application Data\Microsoft\Templates\)、テンプレートファイル(.dot)に入れて、メニューのツール-テンプレートとアドインの中で、追加で、dot ファイルを選ぶ方法があります。もしくは、...Microsoft\Word\STARTUP\ にテンプレートファイルを入れることで、呼び出します。

そうでない場合は、A,B の片方を参照設定します。しかし、参照設定すれば、Aを開けば、必ずBが開いてしまいます。

少しフォルダの位置がややこしいですが、良く読んで試してみてください。

こんばんは。

>(例えばブック名!モジュール名.マクロ名)
この方法は、私は、Excelの場合のほうが特殊だと思います。
Excelは、モジュールが複雑なので、固有のマクロを呼び出さざるを得ないわけです。

もちろん、Wordでも、Application.Run で呼び出すことは可能ですが、そういうことは、Wordではあまりしません。

Wordの場合は、ActiveDocument にはマクロをいれずに、基本的に、Normal.dot にマクロを入れる構造になっています。だから、Normal.dot(C:\Documents and Settings\[UserName]\Applic...続きを読む

Q一括償却資産の減価償却累計額

一括償却資産の減価償却累計額について教えていただけると幸いです。

当社は10~20万の一括償却資産の減価償却を「間接法」で処理しているため、
3年の償却が終わったあとも 器具備品と 減価償却累計額 が残ってしまっています。

間接法で処理している場合、一括償却資産は3年たって償却が終わったら 
「減価償却累計額○○○、器具備品○○○」という仕訳をして消して良いのでしょうか?
消すべきなのでしょうか? よろしくお願いします。

Aベストアンサー

一括償却減価償却資産は、あたかも残存価額0円で3年均等償却をすることにより、実務上の負担を軽減させるものです。

「残存価額0円」ですから、「消すべき」です。

Qexcl:ツール→マクロでの一覧表示からサブルーチンを外したい

 類似のシートに対して、同様な操作を行うため、親プロシージャをシートの選択、サブルーチンを具体的な処理として、EXCL2000にて、プログラムを組みました。

 他のプログラムでは、ツール→マクロ→マクロで、表示されるプログラム一覧にサブルーチンプログラムは表示されないのですが、今回作ったものは、親子ともに表示されてしまいます。

 誤操作防止のため、サブルーチン(子プロシージャ)は一覧からはずしたいのですが、どのようにしたらよいのか、回答頂けましたら、幸いです。

Aベストアンサー

今確認してみたら、Optional の引数だけでは、「マクロの一覧に表示されてしまいますね。#4の以下の部分は「マクロの一覧」に表示させないという点に関しては、間違いでした。撤回します。最近、とぼけた回答ばかりで、皆様にご迷惑をおかけしてます。申し訳ありません。


>この場合、プロシージャをコールする際にも引数を指定する必要がありますが。

の部分の補足ですが、引数に Optional キーワードをつけると引数を渡さず、プロシージャをコールできます。

Q工具器具備品と一括償却資産

前事業年度で、18万円のパソコンを、工具器具備品として仕訳し、減価償却時には一括償却を行っていたのですが、これは一括償却資産に直してほうがいいでしょうか?その場合、下記の仕訳で問題ないですか?

一括償却資産 XXX 工具器具備品 XXX

Aベストアンサー

もし振り替えるのであれば、その仕訳で正しいと思います。
(但し、減価償却累計額を使用している場合は、その分も仕訳に入ってきますが)

ただ、税法上は、「一括償却資産」で計上していた方がわかりやすいのですが、会計上は「工具器具備品」で表示すべき、との事です。
(詳しい人から聞いた話ではありますが)

ですから、そのままでも構わないと思いますし、監査等の制約がないのであれば、振り替えても、どちらでも良いと思います。

Q数式エディタ3.0で数式が表示されない

word2003で数式エディタを使用しているのですが、数式を入力して、入力が終わったら、入力エリアの外をクリックして、数式エディタを終えます。
するとWordに戻って、今入力したものが「オブジェクト」として表示されるはずなのですが、四角い枠だけ表示されて数式は表示されません。

今までは数式が表示されていたのですが、なぜか急に表示されなくなりました。しかし、印刷したときには紙に数式は表示されています。
どうすればword画面上で表示されるようになるでしょうか?
よろしくお願いします。

Aベストアンサー

「ツール」-「オプション」から「表示」タブの
表示項目にある「図をイメージ枠で表示する」に
チェックが入っているのかもしれません。
もし入っていれば、チェックを外してOK、で表示
されると思います。
いかがでしょうか?


人気Q&Aランキング

おすすめ情報