[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『[談]シートレイアウトの投稿どうしてますか?』(momo)
皆さんシートレイアウトを投稿するときにどうしてますか? コード組まれている方もいらっしゃいますか?
毎回、意外と面倒なので作ってみました。 よろしければ使ってください。
'===================================================== ' 投稿用シートレイアウトをクリップボードに取得 ' 作成者(momo) ' ' BrkStr:列間の文字列 初期値は「|」 ' DataObjectID:DataObjectのLate Binding用(変更不可) '===================================================== Option Explicit
Sub SheetlayoutToClipBord()
Const BrkStr As String = "|"
Const DataObjectID As String = "1C3B4210-F441-11CE-B9EA-00AA006B1A69"
Dim myRng As Range, rngFormula As Range, rngBuf As Range
Dim tbl() As Variant
Dim AryTxt() As String, StrBuf As String
Dim i As Long, j As Long, AryWidth() As Long, LenBuf As Long
Set myRng = Application.InputBox("取得したい範囲を選択してください。", Type:=8)
If MsgBox("数式として表示したい範囲はありますか?", vbYesNo) = vbYes Then
Do
Set rngBuf = Application.InputBox("数式として表示したい範囲を選択してください。", Type:=8)
If rngFormula Is Nothing Then
Set rngFormula = rngBuf
Else
Set rngFormula = Application.Union(rngFormula, rngBuf)
End If
Set rngBuf = Nothing
Loop While MsgBox("さらに数式として表示したい範囲がありますか?", vbYesNo) = vbYes
End If
ReDim tbl(1 To myRng.Rows.Count, 1 To myRng.Columns.Count)
ReDim AryWidth(1 To UBound(tbl, 2))
For i = 1 To myRng.Rows.Count
For j = 1 To myRng.Columns.Count
tbl(i, j) = myRng.Cells(i, j).Text
If Not rngFormula Is Nothing Then
If Not Application.Intersect(myRng.Cells(i, j), rngFormula) Is Nothing Then
tbl(i, j) = myRng.Cells(i, j).Formula
End If
End If
LenBuf = Application.Evaluate("LENB(""" & Replace(tbl(i, j), """", vbTab) & """)")
If AryWidth(j) < LenBuf Then
AryWidth(j) = LenBuf
End If
Next j
Next i
ReDim AryTxt(UBound(tbl, 1))
AryTxt(0) = String(Len(myRng.Rows(myRng.Rows.Count).Row) + 3, " ")
For i = 1 To UBound(tbl, 2)
StrBuf = "[" & Split(myRng.Columns(i).EntireColumn.Address(False, False), ":")(0) & "]"
If AryWidth(i) > Len(StrBuf) Then
AryTxt(0) = AryTxt(0) & BrkStr & StrBuf & String(AryWidth(i) - Len(StrBuf), " ")
Else
AryTxt(0) = AryTxt(0) & BrkStr & StrBuf
AryWidth(i) = Len(StrBuf)
End If
Next i
For i = 1 To UBound(tbl, 1)
AryTxt(i) = " [" & myRng.Rows(i).Row & "]" & _
String(Len(myRng.Rows(myRng.Rows.Count).Row) - Len(myRng.Rows(i).Row), " ")
For j = 1 To UBound(tbl, 2)
LenBuf = Application.Evaluate("LENB(""" & Replace(tbl(i, j), """", vbTab) & """)")
If IsNumeric(tbl(i, j)) Then
AryTxt(i) = AryTxt(i) & BrkStr & String(AryWidth(j) - LenBuf, " ") & tbl(i, j)
Else
AryTxt(i) = AryTxt(i) & BrkStr & tbl(i, j) & String(AryWidth(j) - LenBuf, " ")
End If
Next j
Next i
With GetObject("new:" & DataObjectID)
.SetText Join(AryTxt, vbCrLf)
.PutInClipboard
End With
MsgBox "クリップボードにコピーしました。"
End Sub
(momo)2011/2/10 16:58 修正
|[B] |[C] |[D] |[E] |[F]
[2]| |4月 |5月 |6月 |7月
[3]|カラーテレビ| 1100| 540| 650| 330
[4]|掃除機 | 250| 430| 510| 310
[5]|洗濯機 | 410| 530| 580| 660
[6]|冷蔵庫 | 120| 100| 80| 130
[7]|合計 |=SUM(C3:C6)|=SUM(D3:D6)|=SUM(E3:E6)|=SUM(F3:F6)
簡単なテスト、なるほど便利ですね。(kazu)
momoさん、気が付いた点があります。 時間や日付等の書式設定が活かせる方法はありますでしょうか? [[20110209180425]] 『特定のチェック付きを抜かしたリストを関数で』(にしき) また、こちらでテスト使用させていただいた数式が反映しなかったんですよね〜 なぜだかは、検証しきれていません。。。 数式の長さではないと思うのですが・・・ 以上が気が付いた点ですb (キリキ)(〃⌒o⌒)b
書式設定、なるほどValueをTextにすればいいので変更します。
数式が反映されない件も調べてみます〜 (momo)
momoさん♪
凄く便利ですね★改良されるのかな? 思い切り使用させて頂きます☆彡 いつも勉強させてもらってます(^^)v
(MJ12)
MJ12さんありがとうございます。
キリキさんのご指摘の件修正しましたので試してみて頂ければと思います。
書式を加味してValueからText取得にしました。 数式が反映されない原因は数式内に「"」があったために Evaluateで文字列区切りが発生したためでしたのでTabに置換してから処理してます。
(momo)
momoさん
了解です★ありがとうございます☆彡
(MJ12)
完璧ですb たくさん使わせていただきますね^^
(キリキ)(〃⌒o⌒)b
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.