TEXT関数で数値と文字列を結合

e0080122_845385.gif

上図のように数値と文字列を1つのセルに表示させたい場合は、『&』をつかって連結しても大丈夫だが、
今回はTEXT関数を使用してみた。
TEXT関数は『TEXT(値,表示形式)』という感じで設定すればよい。
#,##0 と #,### の違いだが、もし表示する数値がない場合で比較すると、前者は「0」を表示し、後者は表示しないの差だろう。
[PR]
# by slayer0210 | 2006-01-30 08:52 | エクセル一般

PRODUCT関数で積を求める

数値の乗算をする場合は通常は『=A1*B1』のような式を立てる。しかし乗算する数値が複数に及んだ場合は、いちいち『*』を入力するのも面倒なときがある。
そんなときはPRODUCT関数を使用するとよい。
e0080122_7421876.gif

PRODUCT関数を用いて積を求めた場合には、文字列、理論値、エラー値などは無視され、
数値のみの乗算となるので、『*』で計算した時のようなエラーが出ない。
[PR]
# by slayer0210 | 2006-01-30 07:46 | エクセル一般

任意の範囲に写真を挿入する

写真を挿入すると、サイズが大小様々だったり、また貼り付けられる位置も任意の場所には張り付かない。
そんな時の為に便利な(?)マクロを作ってみた。

Sub 任意の範囲に写真を挿入()
 Dim myFname As String
 Dim myrange As Range
 Dim 元図 As Object
   myFname = Application.GetOpenFilename(FileFilter:="すべての図(*.jpg),*.jpg")

    If myFname = "False" Then Exit Sub
   On Error GoTo erhand
    Set myrange = Application.InputBox("取り込み範囲をドラッグして下さい", "任意の範囲をドラッグ", Type:=8)
    Set 元図 = ActiveSheet.Pictures.Insert(myFname)
     With 元図
       .Height = myrange.Height
       .Width = myrange.Width
       .Top = myrange.Top
       .Left = myrange.Left
     End With
   Exit Sub
erhand: MsgBox "キャンセルしました"
End Sub
e0080122_1646598.gif

上図のようなダイアログが表示されるので、任意の場所をドラッグして取り込み場所などを入れる。
すると、ドラッグしたサイズと場所に写真が挿入される。
e0080122_16503951.gif

ただ、縦横の比率などは一切無視しているで妙な写真になることは確かだ。
他の人にとっては糞の役にも立ちそうにないが、目的のものが出来たのでよしとする。
[PR]
# by slayer0210 | 2006-01-19 16:51 | マクロ

任意の数で写真を分割する

以前に写真を2分割するでも紹介したが、今回は縦横ともに任意の数で写真を分割してくれるマクロを。
例えば、縦2、横3で分割した場合は、下図のようになる。
e0080122_1372513.gif

細かなエラー処理などは施していないが、例により糞の役にも立ちそうにないマクロのためこのまま実行してみる。

Sub 分割()
 Dim 元図 As Object
 Dim 各々図 As Shape

 Dim i As Integer
 Dim j As Integer
 Dim num As Integer
 Dim myFname As String

 'Dim x As Integer, y As Integer
 Dim 元図幅 As Single, 元図高 As Single
 Dim 分割幅 As Single, 分割高 As Single

 Const 隙間 As Integer = 5
 Dim 横分割数 As Integer, 縦分割数 As Integer

  Call mySdel

  myFname = Application.GetOpenFilename(FileFilter:="すべての図(*.jpg),*.jpg")
  If myFname = "False" Then Exit Sub
   Set 元図 = ActiveSheet.Pictures.Insert(myFname)
     With 元図
       .Top = 5
       .Left = 5
     End With
  横分割数 = Application.InputBox("横何分割?", "0以外の数値を入力")
  縦分割数 = Application.InputBox("縦何分割?", "0以外の数値を入力")

  元図幅 = 元図.Width
  元図高 = 元図.Height
  分割幅 = 元図幅 / 横分割数
  分割高 = 元図高 / 縦分割数
    元図.Copy
    num = 1

  For i = 1 To 縦分割数
    For j = 1 To 横分割数
      ActiveSheet.Paste
       Selection.Name = "各々図" & num
      With ActiveSheet.Shapes("各々図" & num)
        .Top = 隙間 * i
        .Left = 隙間 * j
        With .PictureFormat
          .CropTop = 分割高 * (i - 1)
          .CropBottom = 分割高 * (縦分割数 - i)
          .CropLeft = 分割幅 * (j - 1)
          .CropRight = 分割幅 * (横分割数 - j)
        End With
     End With
       num = num + 1
    Next
  Next
      元図.Delete
End Sub
上記の構文中に出てくるサブルーチンはあえてここで書く必要もないと思ったので、書かなかった。
また縦、横ともに10ぐらいの数値は大丈夫だがそれ以上になると処理に時間がかかってエクセルが止まってしまう場合がある。
しかし、目的のものが出来たのでよしとする。
[PR]
# by slayer0210 | 2006-01-13 13:25 | マクロ

写真を2分割する

以前にトリミングもどきでも紹介したが、今回はシートに写真を挿入し、その写真を2分割してみた。
e0080122_8345186.gif

コード的にはベタベタでもっとスッキリさせる必要もあるが・・・。あまり糞の役にも立ちそうにないのでこのままで実行させた。

Sub 分割()
 Dim mypic As Object, mypic1 As Shape, mypic2 As Shape
 Dim picW As Single, picBW As Single
 Dim myFname As String
  myFname = Application.GetOpenFilename(FileFilter:="すべての図(*.jpg),*.jpg")

   If myFname = "False" Then Exit Sub

   Set mypic = ActiveSheet.Pictures.Insert(myFname)

     picW = mypic.Width
     picBW = mypic.Width / 2

  mypic.Copy
  ActiveSheet.Paste
  Selection.Name = "mypic1"
    Set mypic1 = ActiveSheet.Shapes("mypic1")
     With mypic1.PictureFormat
       .CropRight = picBW
     End With

     With mypic1
       .Top = 20
       .Left = 20
       .IncrementRotation 350
     End With

  ActiveSheet.Paste
  Selection.Name = "mypic2"
    Set mypic2 = ActiveSheet.Shapes("mypic2")
     With mypic2.PictureFormat
       .CropLeft = picBW
     End With

    With mypic2
       .Top = 20
       .Left = 20 + picBW + 10
       .IncrementRotation 10
    End With
      mypic.Delete
    ActiveSheet.Shapes.Range(Array("mypic1", "mypic2")).Group
End Sub

こうしてみると、Withをネストすればよかったが・・・かなりメチャクチャだ。
しかし目的のものが出来たのでよしとする。
e0080122_849619.gif

[PR]
# by slayer0210 | 2006-01-12 08:49 | マクロ