Sei sulla pagina 1di 18

Convertir numeros a letras en Excel

Esta funcin es muy til ya que nos permite usarla en muchas situaciones cotidianas, y adems no requiere mayor conocimiento de su uso, si usted anteriormente ya ha usado otras funciones incorporadas en Excel. Todo lo que tienes que hacer es pegar el siguiente cdigo en un Mdulo nuevo ya sea en el libro de macros Personal, o en el libro en el cual ests trabajando. Si no sabes como hacerlo, puedes leer este artculo que escrib anteriormente el cual explica como crearlo.
view plaincopy to clipboardprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.

'------------ INICIO DE LA FUNCION PESOS----------------------------------'Function Pesos(Number As Single) As String 'Comentado el 27/10/2008: La siguiente lnea corrige el error de los decimales 'en cantidades grandes, gracias a Any por la correccin. Function Pesos(Number As Double) As String Const MinNum = 1# Const MaxNum = 4294967295.99

Dim Numbers, Tenths, Result As String Numbers = Array("CERO", "UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE" , "DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISEIS", "DIECISIETE", "DIECIOCHO", "DIECINUEVE") 14. Tenths = Array("CERO", "DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA ", "OCHENTA", "NOVENTA") 15. 16. If (Number >= MinNum) And (Number <= MaxNum) Then 17. Result = RecurseNumber((Fix(Number))) 18. 19. If Round((Number - Fix(Number)) * 100) < 10 Then 20. Result = Result + " 0" + Mid(Str(Round((Number - Fix(Number)) * 100)), 2, 1) + "/100 DOLARES" 21. Else 22. Result = Result + " " + Str(Round((Number - Fix(Number)) * 100)) + "/100 DOLARES" 23. End If 24. Else 25. Result = "Error, verifique la cantidad." 26. 27. End If 28. Pesos = Result 29. End Function 30. 31. Function RecurseNumber(N As Long) As String 32. 33. Dim Numbers, Tenths 34. Numbers = Array("CERO", "UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE" , "DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISEIS", "DIECISIETE", "DIECIOCHO", "DIECINUEVE") 35. Tenths = Array("CERO", "DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA ", "OCHENTA", "NOVENTA") 36. Hundrens = Array("CERO", "CIENTO", "DOSCIENTOS", "TRESCIENTOS", "CUATROCIENTOS", "QUINIENTOS", " SEISCIENTOS", "SETECIENTOS", "OCHOCIENTOS", "NOVECIENTOS") 37. 38. Dim Result As String 39. Select Case N 40. Case 0

41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78.

Result = "" Case 1 To 19 Result = Numbers(N) Case 20 To 99 If N Mod 10 <> 0 Then Result = Tenths(N \ 10) + " Y " + RecurseNumber(N Mod 10) Else Result = Tenths(N \ 10) + " " + RecurseNumber(N Mod 10) End If Case 100 To 999 If N \ 100 = 1 Then If N = 100 Then Result = "CIEN" + " " + RecurseNumber(N Mod 100) Else Result = Hundrens(N \ 100) + " " + RecurseNumber(N Mod 100) End If Else Result = Hundrens(N \ 100) + " " + RecurseNumber(N Mod 100) End If Case 1000 To 999999 Result = RecurseNumber(N \ 1000) + " MIL " + RecurseNumber(N Mod 1000) Case 1000000 To 1999999 Result = RecurseNumber(N \ 1000000) + " MILLON " + RecurseNumber(N Mod 1000000) Case 2000000 To 999999999 Result = RecurseNumber(N \ 1000000) + " MILLONES " + RecurseNumber(N Mod 1000000) Case 1000000000 To 4294967295# Result = RecurseNumber(N \ 1000000000) + " BILLONES " + RecurseNumber(N Mod 1000000000) End Select RecurseNumber = Result End Function '========== FIN DE LA FUNCION PESOS ============ 'Para usarlo es = que una funcion de excel, ejemplo: '=pesos(suma(a1:a15)) '=pesos(total)

Para poder usarla solo tienes que poner, por ejemplo, lo que anteriormente se menciona, aunque en mi caso, yo siempre guardo las macros, mtodos y funciones en el Libro de Macros Personal de Excel, para poder llevarme mis funciones a cualquier mquina en la cual me toque trabajar, y no se me genere ningn error de esos comunes que dicen que si desea actualizar los vnculos, o que la celda contiene referencias a informacin que no existe, etc.

As uso yo la funcin (suponiendo que esta formula la escribo en la celda B1:


=personal.xls!pesos(A1)

En la celda A1 se colocan los nmeros y en la celda B1 aparecer ese nmero escrito en letras. Grficamente se vera como la imagen mostrada arriba. Cabe destacar algo importante sobre el nivel de seguridad de Excel con respecto a las macros. Si usted guarda este cdigo en el libro en el cual est trabajando, la prxima vez que usted abra dicho libro Excel le advertir que se han deshabilitado las macros de este libro debido al nivel de seguridad predeterminado, lo cual lo obligar a usted a cambiar el nivel de seguridad de las macros de Excel a un nivel bajo, para efectos de poder ejecutar dicha macro y volver a abrir el libro de nuevo para que la funcin sea funcional. Para evitar esta situacin es recomendable que usted guarde sus Mdulos, funciones, Mtodos, Macros y etc, en el libro de macros PERSONAL y llamar a la funcin de conversin de nmeros a letras como se muestra anteriormente, =personal.xls!pesos..

Convertir nmeros a letras en Excel II (LWP)


Publicado: Junio 23, 2008 por Mario - 30.351 lecturas

Antes que nada quiero hacer un nfasis especial en que el cdigo a continuacin presentado no es de mi autora sino que ha sido tomado de la La Web del Programador y ya no me acuerdo de que parte pero ah lo v hace tiempo y es mejor que el artculo escrito anteriormente en este blog, por lo tanto cualquier duda o pregunta los invito a que visiten LWP y ayuden a esa excelente comunidad. Ok, ya para entrar en el asunto de explicar cmo se van a convertir los nmeros a letras en Excel les dir que ahora van usar la funcin =letras(#COL,#FILA) en

cualquier celda de Excel, pero previamente debern haber creado un mtodo o macro que contenga el cdigo que les mostrar a continuacin. Antes que nada y para aquellos que no les gusta buscar mucho por todos lados, les har una breve explicacioncita de como entrar al editor de Visual Basic de Excel. Yo se que a veces suena tonto y ridculo explicar esto pero los que ya saben no necesitan saber leer esta parte ya que es dirigido a los principiantes o personas no acostumbradas a las interfaces de programacin. Ingresar al Editor de Visual Basic en Excel En Office 2003, Office XP, Office 2000, etc, singa estos pasos: 1. Ir al men Herramientas 2. Ir a Macro 3. Seleccionar Editor de Visual Basic Luego que entren al Editor de Visual Basic seleccionen el libro en el que vayan a necesitar la funcin que veremos luego y vayan al men: 1. Insertar 2. Mdulo Luego pegan todo el cdigo y despus lo guardan y cierran el Editor de Visual Basic. Aclaro de manera especial que si es un libro nuevo en donde van a guardar el cdigo, Excel automticamente pedir que se guarde el libro en donde quedar la macro. Y en la ventanita que se abra pegaran el cdigo siguiente (tambin pueden hacer click desde ya en copy to clipboard para copiar todo este texto)
view plaincopy to clipboardprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.

Function letra(Numero) Dim Texto Dim Millones Dim Miles Dim Cientos Dim Decimales Dim Cadena Dim CadMillones Dim CadMiles Dim CadCientos Dim caddecimales Texto = Round(Numero, 2) Texto = FormatNumber(Texto, 2) Texto = Right(Space(14) & Texto, 14) Millones = Mid(Texto, 1, 3) Miles = Mid(Texto, 5, 3) Cientos = Mid(Texto, 9, 3) Decimales = Mid(Texto, 13, 2) CadMillones = ConvierteCifra(Millones, False) CadMiles = ConvierteCifra(Miles, False) CadCientos = ConvierteCifra(Cientos, True) caddecimales = ConvierteDecimal(Decimales)

23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83.

If Trim(CadMillones) > "" Then If Trim(CadMillones) = "UN" Then Cadena = CadMillones & " MILLON" Else Cadena = CadMillones & " MILLONES" End If End If If Trim(CadMiles) > "" Then If Trim(CadMiles) = "UN" Then CadMiles = "" Cadena = Cadena & "" & CadMiles & "MIL" CadMiles = "UN" Else Cadena = Cadena & " " & CadMiles & " MIL" End If End If If Trim(CadMiles) > "001" Then CadMiles = "MIL" End If If Decimales = "00" Then If Trim(CadMillones & CadMiles & CadCientos & caddecimales) = "UN" Then Cadena = Cadena & "UNO " Else If Miles & Cientos = "000000" Then Cadena = Cadena & " " & Trim(CadCientos) Else Cadena = Cadena & " " & Trim(CadCientos) End If letra = Trim(Cadena) End If Else If Trim(CadMillones & CadMiles & CadCientos & caddecimales) = "UN" Then Cadena = Cadena & "UNO " & "CON " & Trim(caddecimales) Else If Millones & Miles & Cientos & Decimales = "000000" Then Cadena = Cadena & " " & Trim(CadCientos) & " PESOS " & Trim(Decimales) & "/100 M.N." Else Cadena = Cadena & " " & Trim(CadCientos) & " PESOS " & Trim(Decimales) & "/100 M.N." End If letra = Trim(Cadena) End If End If End Function Function ConvierteCifra(Texto, IsCientos As Boolean) Dim Centena Dim Decena Dim Unidad Dim txtCentena Dim txtDecena Dim txtUnidad Centena = Mid(Texto, 1, 1) Decena = Mid(Texto, 2, 1) Unidad = Mid(Texto, 3, 1) Select Case Centena Case "1" txtCentena = "CIEN" If Decena & Unidad <> "00" Then txtCentena = "CIENTO"

84. End If 85. Case "2" 86. txtCentena = "DOSCIENTOS" 87. Case "3" 88. txtCentena = "TRESCIENTOS" 89. Case "4" 90. txtCentena = "CUATROCIENTOS" 91. Case "5" 92. txtCentena = "QUINIENTOS" 93. Case "6" 94. txtCentena = "SEISCIENTOS" 95. Case "7" 96. txtCentena = "SETECIENTOS" 97. Case "8" 98. txtCentena = "OCHOCIENTOS" 99. Case "9" 100. txtCentena = "NOVECIENTOS" 101. End Select 102. 103. Select Case Decena 104. Case "1" 105. txtDecena = "DIEZ" 106. Select Case Unidad 107. Case "1" 108. txtDecena = "ONCE" 109. Case "2" 110. txtDecena = "DOCE" 111. Case "3" 112. txtDecena = "TRECE" 113. Case "4" 114. txtDecena = "CATORCE" 115. Case "5" 116. txtDecena = "QUINCE" 117. Case "6" 118. txtDecena = "DIECISEIS" 119. Case "7" 120. txtDecena = "DIECISIETE" 121. Case "8" 122. txtDecena = "DIECIOCHO" 123. Case "9" 124. txtDecena = "DIECINUEVE" 125. End Select 126. Case "2" 127. txtDecena = "VEINTE" 128. If Unidad <> "0" Then 129. txtDecena = "VEINTI" 130. End If 131. Case "3" 132. txtDecena = "TREINTA" 133. If Unidad <> "0" Then 134. txtDecena = "TREINTA Y " 135. End If 136. Case "4" 137. txtDecena = "CUARENTA" 138. If Unidad <> "0" Then 139. txtDecena = "CUARENTA Y " 140. End If 141. Case "5" 142. txtDecena = "CINCUENTA" 143. If Unidad <> "0" Then 144. txtDecena = "CINCUENTA Y "

145. End If 146. Case "6" 147. txtDecena = "SESENTA" 148. 149. If Unidad <> "0" Then 150. txtDecena = "SESENTA Y " 151. End If 152. Case "7" 153. txtDecena = "SETENTA" 154. If Unidad <> "0" Then 155. txtDecena = "SETENTA Y " 156. End If 157. Case "8" 158. txtDecena = "OCHENTA" 159. If Unidad <> "0" Then 160. txtDecena = "OCHENTA Y " 161. End If 162. Case "9" 163. txtDecena = "NOVENTA" 164. If Unidad <> "0" Then 165. txtDecena = "NOVENTA Y " 166. End If 167. End Select 168. If Decena <> "1" Then 169. Select Case Unidad 170. Case "1" 171. If IsCientos = False Then 172. txtUnidad = "UN" 173. Else 174. txtUnidad = "UNO" 175. End If 176. Case "2" 177. txtUnidad = "DOS" 178. Case "3" 179. txtUnidad = "TRES" 180. Case "4" 181. txtUnidad = "CUATRO" 182. Case "5" 183. txtUnidad = "CINCO" 184. Case "6" 185. txtUnidad = "SEIS" 186. Case "7" 187. txtUnidad = "SIETE" 188. Case "8" 189. txtUnidad = "OCHO" 190. Case "9" 191. txtUnidad = "NUEVE" 192. End Select 193. End If 194. ConvierteCifra = txtCentena & " " & txtDecena & txtUnidad 195. End Function 196. 197. Function ConvierteDecimal(Texto) 198. Dim Decenadecimal 199. Dim Unidaddecimal 200. Dim txtDecenadecimal 201. Dim txtUnidaddecimal 202. Decenadecimal = Mid(Texto, 1, 1) 203. Unidaddecimal = Mid(Texto, 2, 1) 204. 205. Select Case Decenadecimal

206. Case "1" 207. txtDecenadecimal = "DIEZ" 208. Select Case Unidaddecimal 209. Case "1" 210. txtDecenadecimal = "ONCE" 211. Case "2" 212. txtDecenadecimal = "DOCE" 213. Case "3" 214. txtDecenadecimal = "TRECE" 215. Case "4" 216. txtDecenadecimal = "CATORCE" 217. Case "5" 218. txtDecenadecimal = "QUINCE" 219. Case "6" 220. txtDecenadecimal = "DIECISEIS" 221. Case "7" 222. txtDecenadecimal = "DIECISIETE" 223. Case "8" 224. txtDecenadecimal = "DIECIOCHO" 225. Case "9" 226. txtDecenadecimal = "DIECINUEVE" 227. End Select 228. Case "2" 229. txtDecenadecimal = "VEINTE" 230. If Unidaddecimal <> "0" Then 231. txtDecenadecimal = "VEINTI" 232. End If 233. Case "3" 234. txtDecenadecimal = "TREINTA" 235. If Unidaddecimal <> "0" Then 236. txtDecenadecimal = "TREINTA Y " 237. End If 238. Case "4" 239. txtDecenadecimal = "CUARENTA" 240. If Unidaddecimal <> "0" Then 241. txtDecenadecimal = "CUARENTA Y " 242. End If 243. Case "5" 244. txtDecenadecimal = "CINCUENTA" 245. If Unidaddecimal <> "0" Then 246. txtDecenadecimal = "CINCUENTA Y " 247. End If 248. Case "6" 249. txtDecenadecimal = "SESENTA" 250. 251. If Unidaddecimal <> "0" Then 252. txtDecenadecimal = "SESENTA Y " 253. End If 254. Case "7" 255. txtDecenadecimal = "SETENTA" 256. If Unidaddecimal <> "0" Then 257. txtDecenadecimal = "SETENTA Y " 258. End If 259. Case "8" 260. txtDecenadecimal = "OCHENTA" 261. If Unidaddecimal <> "0" Then 262. txtDecenadecimal = "OCHENTA Y " 263. End If 264. Case "9" 265. txtDecenadecimal = "NOVENTA" 266. If Unidaddecimal <> "0" Then

267. txtDecenadecimal = "NOVENTA Y " 268. End If 269. End Select 270. 271. If Decenadecimal <> "1" Then 272. Select Case Unidaddecimal 273. Case "1" 274. txtUnidaddecimal = "UNO" 275. Case "2" 276. txtUnidaddecimal = "DOS" 277. Case "3" 278. txtUnidaddecimal = "TRES" 279. Case "4" 280. txtUnidaddecimal = "CUATRO" 281. Case "5" 282. txtUnidaddecimal = "CINCO" 283. Case "6" 284. txtUnidaddecimal = "SEIS" 285. Case "7" 286. txtUnidaddecimal = "SIETE" 287. Case "8" 288. txtUnidaddecimal = "OCHO" 289. Case "9" 290. txtUnidaddecimal = "NUEVE" 291. End Select 292. End If 293. If Decenadecimal = 0 And Unidaddecimal = 0 Then 294. ConvierteDecimal = "" 295. Else 296. ConvierteDecimal = txtDecenadecimal & txtUnidaddecimal 297. End If 298. End Function

Para el caso de Office 2007 que en algunas instalaciones no trae consigo habilitado la pestaa (tab o ficha) Programador debemos habilitarla haciendo click en el botn de Office y luego clickar las Opciones de Excel tal como se ve en los siguientes dibujos, y luego marcar la casilla de verificacin Mostrar ficha Programador en la cinta de Opciones. Al hacer esto vern que aparecer al final de las dems fichas de Excel la ficha que necesitamos para ingresar al Editor de Visual Basic que es el primer icono que aparece a la izquierda con el texto Visual Basic.

Para ver un poco ms de detalle de como insertar un nuevo mdulo en el libro en que queramos la funcin pueden hacer click aqu para leer un poco ms al respecto y complementar este procedimiento. Una vez hecho todo lo anterior no queda ms que guardar en el Editor de Visual Basic, cerrarlo, y luego probar que la funcin haga su trabajo en una celda cualquiera, asi: Supongamos que la celda A1 tiene el nmero 15,958.76 Llamamos a la funcin letras en la celda A2: =letra(A1) Y aparecer el resultado:

Importantes notas a destacar :

Puesto que la funcin muestra PESOS como moneda local no quiere decir que as debe ser siempre, ya que esto debe ser cambiado a cualquiera que sea nuestra moneda local, ya sean DOLARES, QUETZALES, EUROS, SOLES, ETC., al igual que las letras M.N. (Moneda Nacional) que aparece al final del texto. Para efectuar este cambio nada ms debern reemplazar la palabra PESOS de las filas nmero 61 y 63 por el nombre de su moneda pero sin borrar nada ms, y de igual forma, al final de esas mismas lneas de texto aparece M.N. el cual pueden cambiar por lo que mejor les convenga. Me ha pasado en algunas situaciones que he querido ver el Editor de Visual Basic en Office 2007 y simplemente no est porque dependiendo de la instalacin que se haya hecho, no siempre se instala por lo cual debern tener a la mano el CD de instalacin de Office 2007 y aadir ese complemento.

Como les mencionaba al principio, los crditos no son mos, no he hecho yo est importante funcin, nada ms me he limitado a compartirla con todos aadiendo algo de contenido. Yo vi hace mucho tiempo el cdigo en La Web del Programador y puesto que la primera vez que publiqu mi ejemplo tena cierto problema con ciertas cantidades, he decidido poner este nuevo mtodo, aunque si quieren comentar, pues bienvenidos sean sus comentarios.

Crear una regla en Excel


Publicado: Junio 22, 2007 por Mario - 87.599 lecturas

A los programadores de Office de la Microsoft, nunca les patin por el cerebro crear una regla en Excel que ayudara a los usuarios a simplicarse las tareas de impresi n en facturas, notas de crdito, recibos, etc. quiz porque siempre se concentraron en otras caractersticas que consideraron ms importantes que en una simple regla intil, pero que tan intil hubiera sido tener una regla en las versiones anteriores a Microsoft Office System 2007? Ya se que podran decir que hay programas que permiten medir longitudes en el monitor supuestamente en centimetros, como por ejemplo un programa llamado Screen Caliper, el JS Ruler, o el Screen Ruler, pero a la hora de empezar a tomar medidas para imprimir una hoja de clculo de Excel adaptado a las dimensiones de una factura o documento en blanco para llenar, las medidas han fallado, no asi para medidas de archivos de imgenes que es especficamente para lo que se han hecho. Personalmente, siempre busqu en la web Googleando (usando el buscador de Google) por todos lados, sin obtener frutos para resolver mi inquietud, hasta que un buen da hall un buen c digo de programaci n que hacia lo que andaba buscando. Mi bsqueda haba sido exitosa. Abr Excel y me dispuse a crear un mdulo de Visual Basic vaco, como se hace eso? sencillo abres un libro nuevo y ve a al men Herramientas > Macros > Editor de Visual Basic. Entrars al editor de Visual Basic correspondiente al libro que recien has abierto, de ahi ve al men Insertar y seleccionas Mdulo y en el area de edicin tienes que pegar todo el cdigo que aparece abajo de ests dos imgenes:

En la siguiente imgen est la ventana de Visual Basic en la cual debes seleccionar el libro (panel de la izquierda) en el cual ests trabajando y luego ir al men insertar, seleccionando Mdulo.

Pegar el siguiente c digo en la ventana que se abrir: Si ves que el texto de este cdigo aparece como cortado solo usa la barra de desplazamiento al final para ver el resto.
view plaincopy to clipboardprint?

1. Sub MakeRuler_inch() 2. 3. 'Define the size of a new ruler. 4. Const Ruler_Width As Double = 6 'Width 6 inch 5. Const Ruler_Height As Double = 5 'Height 5 inch 6. 7. 'The setting size on the screen and the actual size on the 8. Const Screen_Width As Double = 6 9. Const Screen_Height As Double = 5 10. Const Printer_Width As Double = 6 11. Const Printer_Height As Double = 5 12. 13. Dim i As Long 14. Dim l As Double 15. Dim x As Long 16. Dim y As Long 17. Dim ws As Worksheet 18. Dim a(0 To 15) As Double 19. Dim x2 As Double 20. Dim y2 As Double 21. 22. x = Ruler_Width * 16 23. y = Ruler_Height * 16 24. a(0) = 3.6: a(1) = 1: a(2) = 2: a(3) = 1: a(4) = 2: a(5) = 25. a(8) = 3: a(9) = 1: a(10) = 2: a(11) = 1: a(12) = 2: a(13) 26. Application.ScreenUpdating = False 27. 28. Set ws = ActiveSheet 29. Worksheets.Add 30. ActiveSheet.Move 31. ActiveSheet.Lines.Add 0, 0, 3 * x, 0 32. For i = 1 To x 33. l = a(i Mod 16) 34. ActiveSheet.Lines.Add 3 * i, 0, 3 * i, 3 * l 35. Next 36. ActiveSheet.Lines.Add 0, 0, 0, 3 * y 37. For i = 1 To y 38. l = a(i Mod 16) 39. ActiveSheet.Lines.Add 0, 3 * i, 3 * l, 3 * i 40. Next 41. ActiveSheet.Lines.Border.ColorIndex = 55 42. 43. For i = 16 To x - 1 Step 16 44. With ActiveSheet.TextBoxes.Add(3 * i - 9, 3 * 3.6, 18, 45. .Text = Format(i \ 16, "!@@") 46. End With 47. Next 48. For i = 16 To y - 1 Step 16 49. With ActiveSheet.TextBoxes.Add(3 * 3.6, 3 * i - 9, 12, 50. .Orientation = xlDownward 51. .Text = Format(i \ 16, "!@@") 52. End With 53. Next 54. With ActiveSheet.TextBoxes 55. .Font.Size = 9 56. 57. .Font.ColorIndex = 55 58. .HorizontalAlignment = xlCenter 59. .VerticalAlignment = xlCenter 60. .Border.ColorIndex = xlNone 61. .Interior.ColorIndex = xlNone

printer.

1: a(6) = 2: a(7) = 1 = 1: a(14) = 2: a(15) = 1

12)

18)

62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76.

End With With ActiveSheet.DrawingObjects.Group .Placement = xlFreeFloating .Width = Application.InchesToPoints(x / 16) .Height = Application.InchesToPoints(y / 16) .CopyPicture xlScreen, xlPicture ActiveSheet.Paste x2 = (Selection.Width - .Width) / 3 y2 = (Selection.Height - .Height) / 3 Selection.Delete .CopyPicture xlPrinter, xlPicture ActiveSheet.Paste .Width = .Width * .Width / (Selection.Width - x2 * 2) * Screen_Width / Printer_Width .Height = .Height * .Height / (Selection.Height y2 * 2) * Screen_Height / Printer_Height Selection.Delete If Val(Application.Version) >= 9 Then .Copy ActiveSheet.PasteSpecial 'Format:="Picture (PNG)" With Selection.ShapeRange.PictureFormat .CropLeft = x2 .CropTop = y2 .CropRight = x2 .CropBottom = y2 End With Selection.Copy ws.Activate ws.PasteSpecial 'Format:="Picture (PNG)" Selection.Placement = xlFreeFloating .Parent.Parent.Close False End If End With Application.ScreenUpdating = True End Sub

77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 'Ruler for Excel(Centimeter) 98. 99. Sub MakeRuler_cm() 100. 101. 'Define the size of a new ruler. 102. Const Ruler_Width As Double = 21 'Width 16 cm 103. Const Ruler_Height As Double = 28 'Height 14 cm 104. 105. 'The setting size on the screen and the actual size on the printer. 106. Const Screen_Width As Double = 21 107. Const Screen_Height As Double = 28 108. Const Printer_Width As Double = 21 109. Const Printer_Height As Double = 28 110. 111. Dim i As Long 112. Dim l As Long 113. Dim x As Long 114. Dim y As Long 115. Dim ws As Worksheet 116. Dim x2 As Double 117. Dim y2 As Double 118. 119. x = Ruler_Width * 10 120. y = Ruler_Height * 10 121.

122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171.

Application.ScreenUpdating = False Set ws = ActiveSheet Worksheets.Add ActiveSheet.Move ActiveSheet.Lines.Add 0, 0, 3 * x, 0 For i = 1 To x If i Mod 10 = 0 Then l = 5 Else: If i Mod 5 = 0 Then l = 4 Else l = 3 ActiveSheet.Lines.Add 3 * i, 0, 3 * i, 3 * l Next ActiveSheet.Lines.Add 0, 0, 0, 3 * y For i = 1 To y If i Mod 10 = 0 Then l = 5 Else: If i Mod 5 = 0 Then l = 4 Else l = 3 ActiveSheet.Lines.Add 0, 3 * i, 3 * l, 3 * i Next ActiveSheet.Lines.Border.ColorIndex = 55 For i = 10 To x - 1 Step 10 With ActiveSheet.TextBoxes.Add(3 * i - 9, 3 * 5, 18, 12) .Text = Format(i \ 10, "!@@") End With Next For i = 10 To y - 1 Step 10 With ActiveSheet.TextBoxes.Add(3 * 5, 3 * i - 9, 12, 18) .Orientation = xlDownward .Text = Format(i \ 10, "!@@") End With Next With ActiveSheet.TextBoxes .Font.Size = 9 .Font.ColorIndex = 55 .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .Border.ColorIndex = xlNone .Interior.ColorIndex = xlNone End With

With ActiveSheet.DrawingObjects.Group .Placement = xlFreeFloating .Width = Application.CentimetersToPoints(x / 10) .Height = Application.CentimetersToPoints(y / 10) .CopyPicture xlScreen, xlPicture ActiveSheet.Paste x2 = (Selection.Width - .Width) / 3 y2 = (Selection.Height - .Height) / 3 Selection.Delete .CopyPicture xlPrinter, xlPicture ActiveSheet.Paste .Width = .Width * .Width / (Selection.Width - x2 * 2) * Screen_Width / Printer_Width .Height = .Height * .Height / (Selection.Height y2 * 2) * Screen_Height / Printer_Height 172. Selection.Delete 173. If Val(Application.Version) >= 9 Then 174. .Copy 175. ActiveSheet.PasteSpecial 'Format:="Picture (PNG)" 176. With Selection.ShapeRange.PictureFormat 177. .CropLeft = x2 178. .CropTop = y2 179. .CropRight = x2 180. .CropBottom = y2 181. End With

182. Selection.Copy 183. ws.Activate 184. ws.PasteSpecial 'Format:="Picture (PNG)" 185. Selection.Placement = xlFreeFloating 186. .Parent.Parent.Close False 187. End If 188. End With 189. Application.ScreenUpdating = True 190. End Sub

Luego que hayamos guardado, cierra el editor de Visual Basic (si no has guardado el libro hasta este momento, se abrir la ventana de Guardar) y ve al libro en el que estamos trabajando y nuevamente ve a Herramientas > Macro > Macros el cual te mostrar la siguiente ventana:

Como podrs ver, ahi tendremos dos valores a escojer: MakeRuler_cm y MakeRuler_inch el cual nos indica que podemos crear la regla en Centmetros o en Pulgadas (inch viene de la palabra inglesa inches que significa pulgadas). Al final, para mostrar el resultado veremos algo parecido a esto:

Ahora quiero aclarar lo siguiente antes de que empiecen a hablar o hacer preguntas al respecto: lo que Excel genera al momento de ejecutar el Mtodo que crea la regla, es una imagen PNG transparente pero con las medidas exactas con relaci n a una regla real. La imagen permanece encima de todas las celdas lo cual se vuelve en cierta manera util o fastidioso, pero que a la vez nos ayuda a que podamos arrastrar los bordes de las columnas y filas de manera que podamos ubicarlas a X distancia segn la medida que tengamos de por ejemplo, una factura. La verdad es que a una regla de este tipo se le puede dar todo tipo de usos segn el grado de imaginaci n y creatividad que cada uno tenga al momento de trabajar en Excel. Yo, por ejemplo, la he usado varias veces para imprimir grandes cantidades de datos en facturas de todo tipo en la oficina de mi trabajo, y me he ahorrado mucho tiempo y trabajo, y de paso que ha sido de mucha utilidad para otros de mis compaeros. He publicado esto con el afn de que todos puedan hacer lo mismo, creando una regla que nunca puso Microsoft en Excel, sino hasta Excel 2007 la cual ya trae una incorporada. Si no quieres usar Office Excel 2007 sino que versiones previas, entonces esta es tu regla ideal.

Potrebbero piacerti anche