• ベストアンサー

Excel におけるプログラミングテクニック

下記、エクセルで処理可能かご教示ください。 (写真参照)上内容を転載する際、同情報のセルを1セルに統合する場合の関数、及び、同プロジェクト予算の合算金額セルを自動で追加する関数。

noname#239136
noname#239136

質問者が選んだベストアンサー

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.3

他の方のコメントにありますように 関数では実現することができません。 他方、 >何というマクロ関数を使えばいいでしょうか。 失礼ながら、このような逆質問が起きるようでは VBAでの解決は厳しいかもしれませんが サンプルコードをポストしますので よかったらVBAに挑戦してみてください。 サンプルコードの AddMenu を実行することで、添付画像のように コンテキストメニューに新たなメニューが登場します。 予め複写範囲を選択して「独自の複写」を選び 任意セルを選択し、「独自の貼付」を選択します。 Option Explicit '//共通変数定義 Dim AryData() As Variant Dim RowCnt As Long Dim ColCnt As Long     '//複写 Sub OriginalCopy()    Dim RowCounter As Long  Dim ColCounter As Long    RowCnt = Selection.Rows.Count  ColCnt = Selection.Columns.Count  ReDim AryData(RowCnt, ColCnt)  For RowCounter = 1 To RowCnt   For ColCounter = 1 To ColCnt    AryData(RowCounter, ColCounter) = _     Selection.Cells(RowCounter, ColCounter).Value   Next ColCounter  Next RowCounter End Sub '//貼付け Sub OriginalPaste()    Dim RowCounter As Long  Dim ColCounter As Long  Dim MyTotal As Long  Dim tgRange As Range    For ColCounter = 1 To ColCnt   Selection.Cells(1, ColCounter).Value = _    AryData(1, ColCounter)  Next ColCounter  For ColCounter = 1 To ColCnt - 1   Selection.Cells(2, ColCounter).Value = _    AryData(2, ColCounter)  Next ColCounter    MyTotal = 0  For RowCounter = 2 To RowCnt   Selection.Cells(RowCounter, ColCnt).Value = _    AryData(RowCounter, ColCnt)   MyTotal = MyTotal + Selection.Cells(RowCounter, ColCnt).Value  Next RowCounter  Selection.Cells(RowCnt + 1, 1).Value = "合計"  Selection.Cells(RowCnt + 1, ColCnt).Value = MyTotal    For ColCounter = 1 To ColCnt - 1   Set tgRange = Range(Selection.Cells(2, ColCounter), _    Selection.Cells(2, ColCounter).Offset(RowCnt - 2, 0))   tgRange.Merge  Next ColCounter     Set tgRange = Range(Selection.Cells(RowCnt + 1, 1), _   Selection.Cells(RowCnt + 1, 1).Offset(0, ColCnt - 2))  tgRange.Merge    Set tgRange = Range(Selection.Cells(1, 1), _   Selection.Cells(1, 1).Offset(RowCnt, ColCnt - 1))   tgRange.Borders(xlDiagonalDown).LineStyle = xlNone   tgRange.Borders(xlDiagonalUp).LineStyle = xlNone   With tgRange.Borders(xlEdgeLeft)     .LineStyle = xlContinuous     .ColorIndex = 0     .TintAndShade = 0     .Weight = xlThin   End With   With tgRange.Borders(xlEdgeTop)     .LineStyle = xlContinuous     .ColorIndex = 0     .TintAndShade = 0     .Weight = xlThin   End With   With tgRange.Borders(xlEdgeBottom)     .LineStyle = xlContinuous     .ColorIndex = 0     .TintAndShade = 0     .Weight = xlThin   End With   With tgRange.Borders(xlEdgeRight)     .LineStyle = xlContinuous     .ColorIndex = 0     .TintAndShade = 0     .Weight = xlThin   End With   With tgRange.Borders(xlInsideVertical)     .LineStyle = xlContinuous     .ColorIndex = 0     .TintAndShade = 0     .Weight = xlThin   End With   With tgRange.Borders(xlInsideHorizontal)     .LineStyle = xlContinuous     .ColorIndex = 0     .TintAndShade = 0     .Weight = xlThin   End With End Sub '//コンテキストメニューに追加 Sub AddMenu()  Dim Newb  Set Newb = Application.CommandBars("Cell").Controls.Add()  With Newb   .Caption = "独自の複写"   .OnAction = "OriginalCopy"   .BeginGroup = False  End With  Set Newb = Application.CommandBars("Cell").Controls.Add()  With Newb   .Caption = "独自の貼付"   .OnAction = "OriginalPaste"   .BeginGroup = False  End With End Sub '//コンテキストメニューから削除 Sub DelMenu()  Application.CommandBars("Cell").Controls("独自の複写").Delete  Application.CommandBars("Cell").Controls("独自の貼付").Delete End Sub

noname#239136
質問者

お礼

素人的な質問に付き合ってくださり感謝です。いただいたVBAのコードを写経してみます。 ご回答ありがとうございました。

その他の回答 (2)

noname#252888
noname#252888
回答No.2

今回、上の表のプロジェクト地域は2つとも同じですが 異なる場合もあってなどいろんなパターンが有って使っていくと思って良いですか? それでも下の表では重複を除いて表示して合計金額を出したい と。 例では1行ですが、場合によっては複数行になると。 No.1さんの言う通りマクロです。 そして「何というマクロ関数ですか?」と聞いていますが、違います。 VBAでプログラミングして関数を作るのです。 重複を除いた件数分、下の表に自動で行を追加して表を作る事が出来ます。 プロジェクト地域が出れば金額は簡単でSUMIF関数で良いです。 1回きりしか使わないと言うのなら、 上の表のプロジェクト地域から重複を除いて下のプロジェクト地域を作りSUMIF関数入れれば良いです。 重複を除くやり方は様々です。 別なシートでソートして関数入れても良いし。(IF関数で上と下が違っていたらフラグを立てるとか) うちの会社ならsakuraエディッタに貼ってソートして「重複を除く」処理で対処します。 こいいうの好きだからタダで作ってあげても良いんだけど 個人のやり取りを禁止しているこのサイトでは連絡先交換する術が無いですね。。。 頑張ってください。

noname#239136
質問者

お礼

非常にご丁寧なご説明ありがとうございます。ご親切ですね。感謝いたします。 サクラエディタを知らなかったので試してみます。 ご回答ありがとうございました。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

可能ですがマクロになります。

noname#239136
質問者

お礼

何というマクロ関数を使えばいいでしょうか。

関連するQ&A

  • エクセルで新規シートを挿入したときに

    エクセルのブックで1~5までシートがあったとして、1には2~5の各セルの合計を入れ、各2~5の合計が出るシートを1に作っていきます。 その際に作られてるシートのセルの参照は可能なのですが、新たにシートを追加して(6.7.8.....)行く場合に自動的にシートが追加され、値が入ったら1の合計のシートに何も追加作業をせずに、数値が足されていくような関数、もしくは方法はありますでしょうか? やはり、シートを足していくごとに1のシートの関数を変更していかなければ不可能でしょうか? また、簡単な作業方法などがあれば教えていただければうれしいです。 よろしくお願いいたします。 使用ソフトはエクセル2000です。

  • エクセルについての質問です。

    エクセルについての質問です。 空欄の列に隣列の数値を自動入力される関数をご教示下さい。 図をご覧頂くとわかるかもしれませんが、 条件として、 ・色付でかつ数値のあるセルを左セルに自動インプットされたい。 という条件をつけさせて頂きます。 エクセルマスターの皆さんのご回答をお待ちしております。 ↓過去に質問させて頂いたものです。 ここで紹介頂いた関数で処理したかったのですが、 できませんでした。。 http://okwave.jp/qa/q6034136.html

  • エクセル関数のセル参照方法

    エクセル関数のセル参照で、あるセルに入力した数値を、参照するセルの行番号として使いたいのですがどうしたらよいのでしょうか? VBAではそのような方法があったと思うのですが、関数で処理する方法はあるのでしょうか? たとえば、 =SUM(C5:C*) のような関数で「*」を他のセルに入力して参照させることは可能でしょうか? よろしくお願いいたします。

  • Excelのピボットテーブル参照において

    始めまして、エクセルのピボットテーブルで セルを参照すると GETPIVOTDATA関数が自動的に行われてしまいます。 以前のエクセル2000の時は参照したセル(例えば=C5)が表示されていたので 計算式をコピーしやすかったのですが 2002になってからは自動的にGETPIVOTDATA関数になってしまう為、コピーが出来ず 手入力で(=C5)としないといけないので、非常に面倒くさいです。 勝手にGETPIVOTDATAが出ないようにする方法はないでしょうか? 宜しくお願い致します。

  • ExcelのVBAのテクニック

    ExcelのVBAを3時間前位から使い始めました。矩形波のフーリエ級数展開の式を項数nを変化させたときのグラフのプログラムを作っています。n,xがある値の時のyの値を出力できるところまでできたのですが、n,xを変化させたときのyの出力の簡単な方法はないでしょうか?配列にn,xの値を代入すればできるのかもしれませんが、Excelのふつうの関数のようにセルを相対参照させて、フィルを使うようにはできないでしょうか?誰か知っていたら教えてください!

  • Excel ライブラリ参照設定

    Excel の =COUNTA(B2:B30,ISNUMBER) で、指定セル範囲から数値の入ったセル数を数えさせようとしますと、「Excel プロジェクトまたはライブラリが見つかりません」といメッセージが出て、次に 「参照設定-VBAProject」という名の、参照可能なライブラリ ファイルの並んだウインドウが出てきます。 さて、ここでどのファイルを選んだらよいのでしょうか。 それがわからないことには、参照のしようがありません。 どうぞ教えて下さい。よろしくお願いします。 (注)関数の ISNUMBER を、">0" あるいは "<>0" などの演算に変えてみても同じです。

  • エクセルに詳しい方、お願いします。

    エクセル(2003)についてですが、セルAかセルBに値が入力されると、その行A~Uまで塗りつぶしされるというようなことが自動(関数を使うなどして自動で)でできる方法がないか、探しています。また関数に書式を指示する単語など、わかりません。お手数ですが、お答えいただけると助かります。C~Uまで値が入っているので条件書式だと、うまく使えませんでした。参照したいのはAとBなのです。 長くなってしまい、質問文もわかりにくいかもしれませんが、よろしくお願いします。

  • エクセル2010または2007でのVBA

    初めまして。 早速ですがエクセルにて、プロジェクト管理票を作っております。 エンジニアが作った作業工程計画のエクセルブックをプロジェクトの通し番号をつけて保存し、 これまでのプロジェクト分すべてを1つのフォルダに保管しています。 その後総務で、この作業工程計画エクセルから、コピー&ペーストでデータを引っ張ってきているのですが、 この作業をVBAで自動化するには、どのようにコードを書けば宜しいでしょうか? ちなみに、コピペするセルは、書かれている情報すべてです。 ですが、あるものはセルA1からG21まで、あるものはA1からC6までしかありません。 よろしくご教示ください。

  • Excelの使い方を教えてください

    お世話になります。 (1)セルA1の値が「あ」である時、セルB1~F1までの色を染めたい。    可能かどうか。また、以下の場合は可能かどうか。    ・セルA1の入力方法がプルダウンの場合    ・セルA1の入力方法が、他シートからの参照の場合  可能な場合、その入力方法・関数等をご教示いただきたい。 (2)セル参照をした時にでる「0(またはこれ以外の値)」を表示させないようにしたい。    関数等を保持したまま、参照セルに何も記載されていない場合は空欄セルとする事は可能かどうか。可能な場合、その方法をご教示いただきたい。 以上2点について、そもそも可能かどうかすら分からない状態です。 一応、基本的なスキル(書式設定や関数等)は持ち合わせていますが、職場と自宅でExcelのバージョンが違いすぎるため、自宅で使用している2013はあまり使いこなせていません。 一番するする使えているのは、職場の2002です(古いのは承知の上です…こちらだと、入力規制や条件付き書式も使えます。2013だと、どこにいったのか分かりません…) よろしくお願い致します。

  • エクセル操作について

    エクセルで、相対参照、絶対参照 複合参照について教えてください。 文字の説明だけではなく、実際にエクセルの図(サイト名添付はやめてほしいです)があるほうが 分りやすいです。 その時、関数(←何関数でもいいので)を ~参照をする場合としない場合では、各セルの数式はどうなって、各セルの数字はどうなるのかを具体的に教えて欲しいです。

専門家に質問してみよう