• ベストアンサー

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

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

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答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