こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

下記、エクセルで処理可能かご教示ください。

(写真参照)上内容を転載する際、同情報のセルを1セルに統合する場合の関数、及び、同プロジェクト予算の合算金額セルを自動で追加する関数。

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2019-07-05 16:50:56

QNo.9632236

すぐに回答ほしいです

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

他の方のコメントにありますように
関数では実現することができません。

他方、
>何というマクロ関数を使えばいいでしょうか。
失礼ながら、このような逆質問が起きるようでは
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

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2019-07-07 11:46:09

お礼

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

ご回答ありがとうございました。

投稿日時 - 2019-07-08 11:24:05

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

今回、上の表のプロジェクト地域は2つとも同じですが
異なる場合もあってなどいろんなパターンが有って使っていくと思って良いですか?

それでも下の表では重複を除いて表示して合計金額を出したい と。
例では1行ですが、場合によっては複数行になると。

No.1さんの言う通りマクロです。
そして「何というマクロ関数ですか?」と聞いていますが、違います。
VBAでプログラミングして関数を作るのです。
重複を除いた件数分、下の表に自動で行を追加して表を作る事が出来ます。

プロジェクト地域が出れば金額は簡単でSUMIF関数で良いです。


1回きりしか使わないと言うのなら、
上の表のプロジェクト地域から重複を除いて下のプロジェクト地域を作りSUMIF関数入れれば良いです。

重複を除くやり方は様々です。
別なシートでソートして関数入れても良いし。(IF関数で上と下が違っていたらフラグを立てるとか)
うちの会社ならsakuraエディッタに貼ってソートして「重複を除く」処理で対処します。



こいいうの好きだからタダで作ってあげても良いんだけど
個人のやり取りを禁止しているこのサイトでは連絡先交換する術が無いですね。。。
頑張ってください。

投稿日時 - 2019-07-05 19:06:47

お礼

非常にご丁寧なご説明ありがとうございます。ご親切ですね。感謝いたします。

サクラエディタを知らなかったので試してみます。

ご回答ありがとうございました。

投稿日時 - 2019-07-08 11:22:18

ANo.1

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

投稿日時 - 2019-07-05 16:55:36

お礼

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

投稿日時 - 2019-07-05 16:56:55

あなたにオススメの質問